0%

Java中对json的处理

Java中有不少处理JSON格式数据的类库,在JSON的官网 http://www.json.org/ 下面对应的各个语言编解码库,Java就有20多种可以使用的类库。

当然,其中最常使用的是json-lib,也是资格比较老的一个库,网上介绍也很多,http://json-lib.sourceforge.net/,但是已经停止更新很久了,
最新的版本还是基于JDK1.5的,最后更新日期是2010年的12月。在Struts2中返回JSON格式的数据时,默认使用的就是json-lib。
但是总体上来说,现在开发程序还是不建议使用json-lib,毕竟有点太古老了。
推荐使用的是号称性能最快的JSON处理器Jackson,社区非常活跃,也一直在更新,功能也很强大,https://github.com/FasterXML/jackson

可以发现在许多其他Java开源项目中对JSON的处理都在使用Jackson,例如Spring。

有人专门对比了这两个类库的性能,
http://wangym.iteye.com/blog/738933

测试总结:

1、显而易见,无论是哪种形式的转换,Jackson > Gson > Json-lib。
Jackson的处理能力甚至高出Json-lib有10倍左右
2、JSON-lib似乎已经停止更新,最新的版本也是基于JDK15,而Jackson的社区则较为活跃;
3、在测试性能的同时,又以人肉方式对这三个类库转换的正确性 进行了检查 ,三者均达100%正确 ;
4、JSON-lib在转换诸如Date类型时较为累赘,如以下是两者的转换结果:
JSON-lib:
{“brithday”:{“date”:17,”day”:2,”hours”:9,”minutes”:24,”month”:7,”seconds”:26,”time”:1282008266398,”timezoneOffset”:-480,”year”:110}}
Jackson:
{“brithday”:1282008123101}
5、JSON-lib依赖commons系列的包及 ezmorph包共 5个,而Jackson除自身的以外只依赖于commons-logging
6、Jackson提供完整基于节点的Tree Model,以及完整的OJM数据绑定功能。

经过几项试验和测试,发现Jackson确实功能很强大,推荐还是默认用Jackson来处理JSON,算是目前Java中比较优秀的JSON处理库。

简单的使用方法:
https://github.com/FasterXML/jackson-databind/

即使是处理比较复杂的JavaBean,嵌套多层并且包含自定义类,以及List等的类Profile,也可以轻松处理,不需要用户过多的配置。当然其他更强大的功能还有待以后发掘。