转载自: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里面都有settergetter

JBean代码如下:

  1. public class JBean {  

  2.   

  3.     private int B_int;  

  4.   

  5.     private String B_String;  

  6.   

  7.     private List B_List;  

  8.   

  9.     private JBeanSub1 B_Object;//子对象  

  10.  

  11.     private static final String jDate = "{/"b_int/":1988,/"b_String/":/"sheep/",/"b_List/":[/"List1/",/"List2/",/"List3/"],/"b_Object/":{/"sub_int/":2012}}";  

  12.   

  13.     public void initBean(){  

  14.   

  15.         this.setB_int(1988);  

  16.   

  17.         this.setB_String("sheep");  

  18.   

  19.         this.B_List = new ArrayList();  

  20.   

  21.         this.B_Object = new JBeanSub1();  

  22.   

  23.         this.B_List.add("List1");  

  24.   

  25.         this.B_List.add("List2");  

  26.   

  27.         this.B_List.add("List3");  

  28.   

  29.         this.B_Object.setSub_int(2012);  

  30.  

  31. }  

  32. Getter  and  setter……  

  33.   

  34. }  

  35.   

  36. class JBeanSub1{  

  37.   

  38. private int Sub_int; 

  39. Getter  and  setter……  

  40.  

JBean2代码如下:

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

 

Jackson使用实例

  1. ObjectMapper mapper = new ObjectMapper();  

  2.  

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

 

  1. JBean bean = new JBean();  

  2.   

  3. bean.initBean();  

  4.   

  5. StringWriter sw = new StringWriter();  

  6.   

  7. JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);  

  8.   

  9. mapper.writeValue(gen, bean);  

  10.   

  11. gen.close();  

  12.   

  13. String json = sw.toString();  

  

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

Gson使用实例

  1. Gson gson = new Gson();  

  2.   

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

 

bean to json

  1. JBean2 bean = new JBean2();  

  2.   

  3. bean.initBean();  

  4.   

  5. System.out.println(gson.toJson(bean));  

 

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

JSON_LIB使用实例

  1. JBean2 bean = new JBean2();  

  2.   

  3. bean.initBean();  

  4.   

  5. JSONObject obj = JSONObject.fromObject(bean);  

  6.   

  7. System.out.println(JSONArray.fromObject(bean).toString());  

 

  1. JBean2 bean = new JBean2();  

  2.   

  3. bean.initBean();  

  4.   

  5. System.out.println(JSONObject.fromObject(bean));  

  6.   

  7. System.out.println(JSONArray.fromObject(bean).toString());  

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

4,性能对比

之前没有做过性能测试这样的工作,于是网上搜索了达人的研究成果,地址

 

简单的说就是性能方面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,我测试用的源代码,时间太急了简单总结下,希望下次遇到json的时候能反映迅速点,有什么写错了希望纠正,谢谢!