java中几个json工具分析测试【原】

本文对比分析了 Java 中三种流行的 JSON 处理工具:Jackson、Gson 和 JSON_LIB,从环境配置、使用实例、性能对比到总结,详细介绍了它们在处理 JSON 数据时的表现差异,特别关注了属性命名规则对转换的影响。

Java中几个json工具分析

1, 环境

JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码

2,分析对象

jackson1.8.2 http://jackson.codehaus.org/

gson1.7.1 http://code.google.com/p/google-gson/

jsob_lib2.4 http://json-lib.sourceforge.net/

3,使用实例

用两个bean进行测试,两个bean都嵌套有数组和对象,唯一的区别是一个属性全部小写开头,另一个属性全部大写开头,bean里面都有settergetter

JBean代码如下:

public class JBean { private int B_int; private String B_String; private List B_List; private JBeanSub1 B_Object;//子对象 private static final String jDate = "{/"b_int/":1988,/"b_String/":/"sheep/",/"b_List/":[/"List1/",/"List2/",/"List3/"],/"b_Object/":{/"sub_int/":2012}}"; public void initBean(){ this.setB_int(1988); this.setB_String("sheep"); this.B_List = new ArrayList(); this.B_Object = new JBeanSub1(); this.B_List.add("List1"); this.B_List.add("List2"); this.B_List.add("List3"); this.B_Object.setSub_int(2012); } Getter and setter…… } class JBeanSub1{ private int Sub_int; Getter and setter…… }

JBean2代码如下:

JBean的属性头字母全部改成小写,然后用IDE自动生成settergetter

Jackson使用实例

Json to bean

ObjectMapper mapper = new ObjectMapper(); JBean bean = mapper.readValue(JBean.getjDate(), JBean.class);

Bean to json

JBean bean = new JBean(); bean.initBean(); StringWriter sw = new StringWriter(); JsonGenerator gen = new JsonFactory().createJsonGenerator(sw); mapper.writeValue(gen, bean); gen.close(); String json = sw.toString();

嵌套使用ListObject的情况下,jackson依然能准确转换,唯一不足之处就是无论bean属性的开头字符是大写还是小写,被jackson转换成字符串后首字母都是小写的了。

Gson使用实例

json to bean

Gson gson = new Gson(); JBean2 bean = gson.fromJson(JBean.getjDate(), JBean2.class);

bean to json

JBean2 bean = new JBean2(); bean.initBean(); System.out.println(gson.toJson(bean));

使用很简单,bean小写字母开头时,由jsonbean才能成功。

JSON_LIB使用实例

json to bean

JBean2 bean = new JBean2(); bean.initBean(); JSONObject obj = JSONObject.fromObject(bean); System.out.println(JSONArray.fromObject(bean).toString());

bean to json

JBean2 bean = new JBean2(); bean.initBean(); System.out.println(JSONObject.fromObject(bean)); System.out.println(JSONArray.fromObject(bean).toString());

对嵌套ListObject支持不够好,我调试嵌套的时候没有成功,时间关系也没来得及细细找原因,不过之前有使用过,这个工具最大的好处是,无论json字符串嵌套的是数组还是对象,使用JSONObject.fromObject或者JSONArray.fromObject转换后一律分别转换成对象和数组了,对操作是比较方便的,但是却改变了json原来的数据结构。

4,性能对比

之前没有做过性能测试这样的工作,于是网上搜索了达人的研究成果,地址http://wangym.iteye.com/blog/738933

简单的说就是性能方面jackson > gson > json-lib。其中gsonjson-lib性能略高一点,jacks性能高出json-lib10倍。

5,总结

还有一点忘记补充了,jacksongson都可以独立使用,而json-lib是依赖其他五个包的,json-lib官网原话

Json-lib requires (at least) the following dependencies in your classpath:

jakarta commons-lang 2.5

jakarta commons-beanutils 1.8.0

jakarta commons-collections 3.2.1

jakarta commons-logging 1.1.1

ezmorph 1.0.6

这些类库据说在struts2里面都有。无语json-lib了,性能低不说,还依赖那么多类库,转换也不是很方便。

强力推荐使用jacksongson,我测试用的源代码http://download.youkuaiyun.com/source/3386315,时间太急了简单总结下,希望下次遇到json的时候能反映迅速点,有什么写错了希望纠正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值