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代码如下:

  1. public class JBean {
  2. private int B_int;
  3. private String B_String;
  4. private List B_List;
  5. private JBeanSub1 B_Object;//子对象
  6. private static final String jDate = "{/"b_int/":1988,/"b_String/":/"sheep/",/"b_List/":[/"List1/",/"List2/",/"List3/"],/"b_Object/":{/"sub_int/":2012}}";
  7. public void initBean(){
  8. this.setB_int(1988);
  9. this.setB_String("sheep");
  10. this.B_List = new ArrayList();
  11. this.B_Object = new JBeanSub1();
  12. this.B_List.add("List1");
  13. this.B_List.add("List2");
  14. this.B_List.add("List3");
  15. this.B_Object.setSub_int(2012);
  16. }
  17. Getter  and  setter……
  18. }
  19. class JBeanSub1{
  20. private int Sub_int;
  21. Getter  and  setter……
  22. }

JBean2代码如下:

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

Jackson使用实例

(Json to bean)

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

(Bean to json)

  1. JBean bean = new JBean();
  2. bean.initBean();
  3. StringWriter sw = new StringWriter();
  4. JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
  5. mapper.writeValue(gen, bean);
  6. gen.close();
  7. String json = sw.toString();

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

Gson使用实例

(json to bean)

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

(bean to json)

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

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

JSON_LIB使用实例

(json to bean)

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

(bean to json)

  1. JBean2 bean = new JBean2();
  2. bean.initBean();
  3. System.out.println(JSONObject.fromObject(bean));
  4. 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的时候能反映迅速点,有什么写错了希望纠正,谢谢!

Java中json工具对比分析的更多相关文章

  1. lua、groovy嵌入到java中的性能对比(转)

    lua和groovy都是可以嵌入到java中的脚本语言.lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能. ...

  2. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  3. java中 json和bean list map之间的互相转换总结

    JSON 与 对象 .集合 之间的转换 JSON字符串和java对象的互转[json-lib]   在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级 ...

  4. (转)Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  5. Java中JSON字符串与java对象的互换实例详解(转)

    http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要 ...

  6. [Java学习] JSON工具学习记录--FastJSON

    最近做项目,总是与json打交道,在用了即可json工具后,个人认为fastJson最好用,很方便,API也清晰可见,所以记录下使用方法,给需要的人提供帮助.(部分摘抄自网络) 一.API入口 Fas ...

  7. Java中json的构造和解析

    什么是 Json? JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式.  易于人阅读和编写.同时也易于机 ...

  8. Java中ArrayList源码分析

    一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保 ...

  9. java生成Json工具之JsonSimple的使用

    json-simple是由是Google开发的Java JSON解析框架,基于Apache协议.目前版本为1.1 项目主页:https://code.google.com/p/json-simple/ ...

随机推荐

  1. BOM 之 window

    BOM 之 window 对象 在网页中定义的任何一个对象,变量和函数,都以 window 作为其 Global 对象,因此有权访问别的方法和属性    var age = 26;    functi ...

  2. IE6 Bug overflow:hidden失效

    下面就是我所收集或遇到的IE6 Bug之一:overflow:hidden失效 当父元素的直接子元素或者下级子元素的样式拥有position:relative属性时,父元素的overflow:hidd ...

  3. linux shell获取时间

    获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用 ...

  4. wpf数据自动树结构

    在项目中,时常会遇到存在上下级关系的数据.在呈现方面,按照传统方法,不得不组装TreeNode之后添加到TreeView 中,已实现树形数据的显示.如果项目中需要多处使用树,毫无疑问这将存在巨大的代码 ...

  5. codeforces 361 C - Mike and Chocolate Thieves

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u   Description Bad ...

  6. Android Learning:多线程与异步消息处理机制

    在最近学习Android项目源码的过程中,遇到了很多多线程以及异步消息处理的机制.由于之前对这块的知识只是浅尝辄止,并没有系统的理解.但是工程中反复出现让我意识到这个知识的重要性.所以我整理出这篇博客 ...

  7. js将数字转换成大写的人民币表达式

    function changeNumMoneyToChinese(money) { var cnNums = new Array("零", "壹", " ...

  8. theano中的concolutional_mlp.py学习

    (1) evaluate _lenet5中的导入数据部分 # 导入数据集,该函数定义在logistic_sgd中,返回的是一个list datasets = load_data(dataset) # ...

  9. Octopress 之 Mac 版环境配置

    前提条件: 1.安装了 Git2.用 rbenv 或 RVM 安装了 Ruby 1.9.3 以上版本3.安装了 ExecJS 的一种支持 JavaScript 运行环境 一.安装 Octopress ...

  10. iOS内存管理系列之二:自动释放与便捷方法

    有时候一个所有者创建一个对象后,会立刻将该对象的指针传递给其它所有者.这时,这个创建者不希望再拥有这个对象,但如果立刻给它发送一个release消息会导致这个对象被立刻释放掉——这样其它所有者还没有来 ...