`
guimingyue
  • 浏览: 75878 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
社区版块
存档分类
最新评论

Json-lib的使用小结

    博客分类:
  • Java
阅读更多
以前在使用Json-lib的时候,总是报
There is a cycle in the hierarchy!
这个错误,所以好长时间使用json数据的时候都是在Action中自己手工装配json格式的数据,前几天,在JE上面看到这篇帖子:http://www.iteye.com/topic/826988这篇帖子,看到这个链接http://s.xnimg.cn/a13819/allunivlist.js,这个链接上是JSON格式的数据,貌似这些数据不少,但是,如果手工装配的话,那肯定是一个累人的活,就算是用循环(PS:俺不知道JSON-lib上面是怎么做的,以后有时间再研究研究),所以自然就想到了json-lib(PS:貌似还有GSON,Google的,据说效率老高了,但是struts2的lib中是json-lib),但是俺又不咋会用json-lib,所以只能求助于大家了,在JE上提了一个问题http://www.iteye.com/problems/56669(再次感谢大家的帮助),所以总结一下:
这里,模仿人人网上,建立三个实体:Province,College,Department,分别是省份,大学,院系,关联关系如下:
Province-----College一对多,双向
College------Department一对多,双向

实体的主要代码如下:
public class Province {
	/*省份id*/
	private Integer proid;
	/*省份名*/
	private String proname;
	
	private Set<College> colleges = new HashSet<College>();
}

public class College {
	/*学校id*/
	private Integer colid;
	/*学校名称*/
	private String name;
	/*学校所在省*/
	private Province province;
	private Set<Department> depts = new HashSet<Department>();
}

public class Department {
	private Integer depid;
	
	private String depname;
	
	private College college;
}

以我个人的理解,测试代码如下:
@Test
	public void testFormat() {
		Province pro = new Province();
		pro.setProid(12);
		pro.setProname("湖北省");
		College col1 = new College();
		col1.setColid(1);
		col1.setName("黄冈师范");
		col1.setProvince(pro);
		Department dept1 = new Department();
		dept1.setDepid(11);
		dept1.setDepname("计科院");
		Department dept2 = new Department();
		dept2.setDepid(12);
		dept2.setDepname("计科");
		Department dept3 = new Department();
		dept3.setDepid(13);
		dept3.setDepname("计科");
		Set<Department> depts = new HashSet<Department>();
		depts.add(dept1);
		depts.add(dept2);
		depts.add(dept3);
		col1.setDepts(depts);
		
		College col2 = new College();
		col2.setColid(2);
		col2.setName("黄冈师范学院");
		col2.setProvince(pro);
		Department dept4 = new Department();
		dept4.setDepid(21);
		dept4.setDepname("计科院");
		Department dept6 = new Department();
		dept6.setDepid(22);
		dept6.setDepname("计科");
		Department dept5 = new Department();
		dept5.setDepid(23);
		dept5.setDepname("计科");
		Set<Department> depts2 = new HashSet<Department>();
		depts2.add(dept4);
		depts2.add(dept5);
		depts2.add(dept6);
		col2.setDepts(depts2);
		
		Set<College> cols = new HashSet<College>();
		cols.add(col1);
		cols.add(col2);
		pro.setColleges(cols);
		JsonConfig config = new JsonConfig();
		config.setJsonPropertyFilter(new CustomPropertyFilter());
		JSONObject json = JSONObject.fromObject(pro, config);
		System.out.println(json.toString());
	}

但是打印出来的数据是:
{"colleges":[{"colid":1,"depts":[{"college":null,"depid":13,"depname":"计科"},{"college":null,"depid":12,"depname":"计科"},{"college":null,"depid":11,"depname":"计科院"}],"name":"黄冈师范","province":null},{"colid":2,"depts":[{"college":null,"depid":21,"depname":"计科院"},{"college":null,"depid":22,"depname":"计科"},{"college":null,"depid":23,"depname":"计科"}],"name":"黄冈师范学院","province":null}],"proname":"湖北省","proid":12}

打印出来的json数据中有"college":null和"province":null这样的数据,所以自然不爽,看了大虾的回答,就加上了类:
import net.sf.json.util.PropertyFilter;

/**
 * 自定义属性过滤器
 * 
 * @author qiuzj
 *
 */
public class CustomPropertyFilter implements PropertyFilter {

	@Override
	public boolean apply(Object source, String name, Object value) {
		// 过滤掉为null的属性
		if (value == null)
			return true;
		return false;
	}

}

然后在测试的代码中加上如下代码:
JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new CustomPropertyFilter());
JSONObject json = JSONObject.fromObject(pro, config);

这样就可以去掉json数据中为null(PS:上面的测试代码中College类中的Province属性没有设置,Department类中的College属性没有设置)。
    如果要设置College类中的Province属性,则会报
There is a cycle in the hierarchy!
错误,所以应该再加上:
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
这样就不会报错(但是这样加上之后,又会出现"province":null的情况,解决办法俺还不知道)
对于JSON-lib大家还有什么更好的办法,大家一起研究一下.......
分享到:
评论

相关推荐

    json-lib-2.4-jdk15.jar下载

    json-lib体积小、无依赖,性能表现也不错,适合在各种Java项目中使用。 json-lib的主要功能有: 1. 简单易用:json-lib的API简单易于使用,一般只需要一行或两行代码就可以完成Java对象和JSON的相互转换。 2. 支持对象图:...

    json-lib-2.2.3-jdk15.jar

    在实际应用中,使用JSON-lib进行JSON操作的一般步骤包括: 1. 添加依赖:在项目中引入`json-lib-2.2.3-jdk15.jar`,如果使用Maven或Gradle,需要将库添加到构建配置中。 2. 创建JSON对象:使用JSON-lib提供的方法...

    json-lib-2.4-jdk15.jar

    通过使用json-lib,开发者可以避免手动编写繁琐的JSON字符串拼接代码,提高开发效率和代码的可读性。 然而,随着技术的发展,虽然json-lib在当时是一个流行的JSON处理库,但现在已有其他更先进的替代品,如Gson、...

    json-lib应用所有jar

    在这个压缩包中,"json-lib"很可能包含了所有必要的jar文件,使得开发者无需额外寻找其他依赖,可以直接在项目中使用。 使用JSON-lib的主要优点包括: 1. **易用性**:JSON-lib提供了简单直观的API,使得Java对象...

    json-lib-2.2.2-jdk15.jar

    JSON库如json-lib,为开发者提供了在Java环境中处理JSON的强大工具。 json-lib-2.2.2-jdk15.jar是JSON库的一个版本,特别针对Java 1.5(JDK 1.5)进行了优化。这个压缩包包含了json-lib库的二进制文件,用于在...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...

    json-lib jar和所有依赖的jar

    在Java开发中,`json-lib` 被用作处理JSON的一种工具,特别是当项目中不使用或不方便使用如Gson、Jackson等其他JSON库时。 在标题中提到的"json-lib jar和所有依赖的jar",这通常是指`json-lib`库本身及其依赖的第...

    json-lib-2.4-jdk15和全部依赖jar包

    在实际开发中,使用`json-lib`时,你需要按照以下步骤操作: 1. 将`json-lib-2.4-jdk15.jar`及所有依赖的jar包添加到项目的类路径中。 2. 引入库的相应命名空间,例如:`import net.sf.json.JSONObject;` 3. 使用`...

    json-lib-2.3.jar

    在使用json-lib时,通常会涉及到以下几个关键概念: 1. **JsonArray**: 表示JSON数组,可以包含零个或多个JsonObject或其他Json元素。 2. **JsonObject**: 表示JSON对象,由键值对组成,键是字符串,值可以是各种...

    JSON-lib包json-lib-0.8.jar和json-lib-0.9.jar包

    6. **API使用**:理解JSON-lib提供的核心类,如JSONObject、JSONArray、JSONUtil等,以及它们的方法,是有效使用此库的关键。开发者需要学习如何创建、读取、修改JSON对象和数组,以及如何在Java对象和JSON数据之间...

    json-lib-2.3-jdk15开发包和所有依赖包

    5. **依赖包的集成**:`json-lib-2.3-jdk15`开发包包含了所有必要的依赖,这意味着你不需要额外引入其他库就能使用`json-lib`的所有功能。这简化了项目构建过程,减少了因依赖管理问题引发的错误。 6. **兼容性**:...

    json-lib-2.4-jdk15及其依赖包

    1、json的核心包:json-lib-2.4-jdk15.jar; 2、json-lib-2.4-jdk15.jar依赖的jar包:commons-beanutils-1.9.3.jar,commons-collections-3.2.2.jar,commons-lang-2.6.jar,commons-logging-1.2.jar,ezmorph-1.0.6...

    json-lib-2.4和相应的依赖包

    在实际开发中,json-lib-2.4的使用通常涉及以下步骤: 1. **导入依赖**:将json-lib-2.4的jar包添加到项目的类路径中,或者在Maven或Gradle等构建工具中声明依赖。 2. **创建JSON对象**:使用`...

    json-lib-2.4-jdk15.jar及其相关依赖

    `json-lib`库的使用使得Java开发者在处理JSON数据时更加便捷,但需要注意的是,随着Java生态的发展,现在更流行的是使用Jackson、Gson或Google的AutoValue库来处理JSON,它们提供了更多特性和更好的性能。...

    使用json-lib实现json与Java对象的互转

    要使用 `json-lib` 实现 JSON 与 Java 对象的互转,首先需要在项目中引入该库。如果你使用的是 Maven,可以在 `pom.xml` 文件中添加如下依赖: ```xml &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt; &lt;artifactId&gt;json-lib...

    maven中 引入jar报错:Missing artifact net.sf.json-lib:json-lib:jar:2.4

    &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt; &lt;artifactId&gt;json-lib &lt;version&gt;2.4 &lt;classifier&gt;jdk15 或者直接下载这个包

    json-lib-2.3-jdk15基础jar包合辑

    - **兼容性**:`json-lib-2.3-jdk15`特别针对JDK 1.5进行了优化,保证了在使用此版本Java环境的应用程序中的良好运行。 - **性能提升**:相比早期版本,2.3版可能进行了性能优化,提高了JSON序列化和反序列化的速度...

    json-lib-2.4-jdk15.jar包

    json-lib-2.4-jdk15.jar json-lib-2.4-jdk15-sources.jar json-lib-2.4-jdk15-javadoc.jar 包含文件有:json-lib-2.4-jdk15.jar json-lib-2.4-jdk15-sources.jar json-lib-2.4-jdk15-javadoc.jar

    json-lib.jar

    JSON-lib.jar是Java平台上的一个库,用于处理JSON数据,特别适用于Java开发者在他们的应用程序中实现JSON的序列化和反序列化。 在Java中,处理JSON通常涉及两个主要任务:将Java对象转换为JSON字符串(序列化),...

    json-lib-2.4-jdk15及其依赖jar包

    在Java中,使用JSON-Lib进行JSON操作主要包括以下几个核心步骤: 1. **序列化(Serialization)**:将Java对象转换为JSON字符串。例如,你可以有一个Java的HashMap或自定义类实例,通过JSON-Lib提供的`...

Global site tag (gtag.js) - Google Analytics