转载自:http://blog.csdn.net/weinianjie1/article/details/6561788
1, 环境
JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码
2,分析对象
jackson1.8.2
gson1.7.1
jsob_lib2.4 /
3,使用实例
用两个bean进行,两个bean都嵌套有数组和对象,唯一的区别是一个属性全部小写开头,另一个属性全部大写开头,bean里面都有setter和getter。
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自动生成setter和getter。
Jackson使用实例
ObjectMapper mapper = new ObjectMapper();
JBean bean = mapper.readValue(JBean.getjDate(), JBean.class);
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();
嵌套使用List和Object的情况下,jackson依然能准确转换,唯一不足之处就是无论bean属性的开头字符是大写还是小写,被jackson转换成字符串后首字母都是小写的了。
Gson使用实例
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小写字母开头时,由json转bean才能成功。
JSON_LIB使用实例
JBean2 bean = new JBean2();
bean.initBean();
JSONObject obj = JSONObject.fromObject(bean);
System.out.println(JSONArray.fromObject(bean).toString());
JBean2 bean = new JBean2();
bean.initBean();
System.out.println(JSONObject.fromObject(bean));
System.out.println(JSONArray.fromObject(bean).toString());
对嵌套List和Object支持不够好,我调试嵌套的时候没有成功,时间关系也没来得及细细找原因,不过之前有使用过,这个工具最大的好处是,无论json字符串嵌套的是数组还是对象,使用JSONObject.fromObject或者JSONArray.fromObject转换后一律分别转换成对象和数组了,对操作是比较方便的,但是却改变了json原来的。
4,性能对比
之前没有做过性能测试这样的工作,于是网上搜索了达人的研究成果,地址
简单的说就是性能方面jackson > gson > json-lib。其中gson比json-lib性能略高一点,jacks性能高出json-lib有10倍。
5,总结
还有一点忘记补充了,jackson和gson都可以独立使用,而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了,性能低不说,还依赖那么多类库,转换也不是很方便。
强力推荐使用jackson和gson,我测试用的源代码,时间太急了简单总结下,希望下次遇到json的时候能反映迅速点,有什么写错了希望纠正,谢谢!