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. Android更新UI的两种方法——handler与runOnUiThread()

    在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面 显示常会报错.抛出异常:android.view.ViewRoo ...

  2. 防止sql注入式攻击 SQL注入学习——三层架构

    解决方案是:1.首先在UI录入时,要控制数据的类型和长度.防止SQL注入式攻击,系统提供检测注入式攻击的函数,一旦检测出注入式攻击,该数据即不能提交:2.业务逻辑层控制,通过在方法内部将SQL关键字用 ...

  3. XhProf安装教程–详细教程

    wget去这里找最新的包下载,我现在最新的是xhprof-0.9.4.tgz cd /tmp mkdir xhprof && cd xhprof wget http://pecl.ph ...

  4. 《转》前端性能优化----yahoo前端性能团队总结的35条黄金定律

    除了自己总结:1. 减少http请求,2.压缩并优化js/css/image 3.尽量静态页面,从简原则 4.代码规范(详见:个人知识体系思维导图) 从yahoo 新学到的: 网页内容 减少http请 ...

  5. 如何在PSD中准确切出图片

    步骤如下: 1.Ctrl+alt+鼠标滚轮 放大图片,按住H键拖动图片选取位置: 2.选择“移动工具” (勾选“自动选择”,“图层”): 3.选中后,选择图层,右击,选择“转换为智能对象”: 4.使用 ...

  6. ubuntu1404下Apache2.4错误日志error.log路径位置

    首先打开/etc/apache2路径下的apache2.conf文件,找到ErrorLog如下 ErrorLog ${APACHE_LOG_DIR}/error.log 这里{APACHE_LOG_D ...

  7. C与C++的区别

    C++与C的区别 1. 动态分配内存 1)C语言 a. malloc函数:在内存的动态存储区中分配一个长度为size的连续空间:       void *malloc(unsigned int siz ...

  8. 问题:Maven: missing net.sf.json-lib

    问题:Maven: missing net.sf.json-lib 解决: pom.xml里加入json-lib依赖,注意要添加classifier一行,如下: 这里maven地址:http://re ...

  9. 浅谈PHP神盾的解密过程

    我们来做第一步解密处理吧. PS: 这只是我的解密思路,与大家分享一下,也许你有更好的方法还望分享 <?php $str = file_get_contents("1.php" ...

  10. Python 3中套接字编程中遇到TypeError: 'str' does not support the buffer interface的解决办法

    转自:http://blog.csdn.net/chuanchuan608/article/details/17915959 目前正在学习python,使用的工具为python3.2.3.发现3x版本 ...