• Java中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里面都有setter和getter。

    JBean代码如下:

     

    [java] view plain copy
     
    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.    
    12.   
    13.     private static final String jDate = "{/"b_int/":1988,/"b_String/":/"sheep/",/"b_List/":[/"List1/",/"List2/",/"List3/"],/"b_Object/":{/"sub_int/":2012}}";  
    14.   
    15.    
    16.   
    17.     public void initBean(){  
    18.   
    19.         this.setB_int(1988);  
    20.   
    21.         this.setB_String("sheep");  
    22.   
    23.         this.B_List = new ArrayList();  
    24.   
    25.         this.B_Object = new JBeanSub1();  
    26.   
    27.    
    28.   
    29.         this.B_List.add("List1");  
    30.   
    31.         this.B_List.add("List2");  
    32.   
    33.         this.B_List.add("List3");  
    34.   
    35.    
    36.   
    37.         this.B_Object.setSub_int(2012);  
    38.   
    39. }  
    40.   
    41.    
    42.   
    43. Getter  and  setter……  
    44.   
    45. }  
    46.   
    47.    
    48.   
    49. class JBeanSub1{  
    50.   
    51. private int Sub_int;  
    52.   
    53.    
    54.   
    55. Getter  and  setter……  
    56.   
    57. }  

    JBean2代码如下:

    把JBean的属性头字母全部改成小写,然后用IDE自动生成setter和getter。

     

    Jackson使用实例

    (Json to bean)

     

    [java] view plain copy
     
    1. ObjectMapper mapper = new ObjectMapper();  
    2.   
    3. JBean bean = mapper.readValue(JBean.getjDate(), JBean.class);  

     

    (Bean to json)

     

    [java] view plain copy
     
    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();  

     

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

    Gson使用实例

    (json to bean)

     

    [java] view plain copy
     
    1. Gson gson = new Gson();  
    2.   
    3. JBean2 bean = gson.fromJson(JBean.getjDate(), JBean2.class);  

     

    (bean to json)

     

    [java] view plain copy
     
    1. JBean2 bean = new JBean2();  
    2.   
    3. bean.initBean();  
    4.   
    5. System.out.println(gson.toJson(bean));  

     

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

    JSON_LIB使用实例

    (json to bean)

     

    [java] view plain copy
     
    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());  

    (bean to json)

     

    [java] view plain copy
     
    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());  

     

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

    4,性能对比

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

     

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

  • 相关阅读:
    MD5加密Java实现
    一直以来有个问题我没有解决,现在知道了
    从最近一次Struts 2 的漏洞看Web安全
    Android与Struts2、Hibernate打造社交平台
    Android与服务器端交互
    大二生活总结
    throttle_classes 60秒访问10次限制
    restframework流程
    django-admin有用的设置
    django-ckeditor设置
  • 原文地址:https://www.cnblogs.com/huajiezh/p/6078679.html
Copyright © 2020-2023  润新知