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代码如下:
- 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使用实例
(Json to bean)
- ObjectMapper mapper = new ObjectMapper();
- JBean bean = mapper.readValue(JBean.getjDate(), JBean.class);
(Bean to json)
- 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使用实例
(json to bean)
- 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使用实例
(json to bean)
- JBean2 bean = new JBean2();
- bean.initBean();
- JSONObject obj = JSONObject.fromObject(bean);
- System.out.println(JSONArray.fromObject(bean).toString());
(bean to json)
- 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,性能对比
之前没有做过性能测试这样的工作,于是网上搜索了达人的研究成果,地址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工具对比分析的更多相关文章
- lua、groovy嵌入到java中的性能对比(转)
lua和groovy都是可以嵌入到java中的脚本语言.lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能. ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- java中 json和bean list map之间的互相转换总结
JSON 与 对象 .集合 之间的转换 JSON字符串和java对象的互转[json-lib] 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级 ...
- (转)Java中JSON字符串与java对象的互换实例详解
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- Java中JSON字符串与java对象的互换实例详解(转)
http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要 ...
- [Java学习] JSON工具学习记录--FastJSON
最近做项目,总是与json打交道,在用了即可json工具后,个人认为fastJson最好用,很方便,API也清晰可见,所以记录下使用方法,给需要的人提供帮助.(部分摘抄自网络) 一.API入口 Fas ...
- Java中json的构造和解析
什么是 Json? JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机 ...
- Java中ArrayList源码分析
一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保 ...
- java生成Json工具之JsonSimple的使用
json-simple是由是Google开发的Java JSON解析框架,基于Apache协议.目前版本为1.1 项目主页:https://code.google.com/p/json-simple/ ...
随机推荐
- STUN/TURN/ICE协议在P2P SIP中的应用(二)
1 说明 2 打洞和穿越的概念... 1 3 P2P中的打洞和穿越... 2 4 使用STUN系列 协议穿越的特点... 2 5 STUN/ ...
- [Machine Learning] Probabilistic Graphical Models:二、Bayes Network Fundamentals(1、Semantics & Factorization)
一.How to construct the dependency? 1.首字母即随机变量名称 2.I->G是更加复杂的模型,但Bayes里不考虑,因为Bayes只是无环图. 3.CPD = c ...
- web系统
现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务器来说 ...
- 移动端消除click事件的延迟效果
https://github.com/Plaputta/jquery.event.special.fastclick 用fastclick事件,类似zepto的tap事件,若想去除连点效果,可在外层显 ...
- cvThreshold()函数理解
对图像二值化函数cvThreshold的理解 Threshold 对数组元素进行固定阈值操作 void cvThreshold( const CvArr* src, CvArr* dst, doubl ...
- ruby特性
1. ruby类结构 每个类都是Class类的对象 所有类都继承自BasicObject类(Module类不能实例化) 2. 单例方法 单例方法可以不定义在类中,只为某个对象定义方法,所以称为单例方法 ...
- javascript日用代码集合(一)
获取url参数 function get_url_param(name){ var reg = new RegExp("(^|&)" + name + "=([^ ...
- bzoj 1006: [HNOI2008]神奇的国度 弦图的染色问题&&弦图的完美消除序列
1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1788 Solved: 775[Submit][Stat ...
- 【MyBatis学习笔记】
[MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...
- nodejs compressor
http://www.2cto.com/kf/201203/122015.html http://www.cnblogs.com/terrylin/archive/2013/06/01/3112596 ...