Jackson:http://jackson.codehaus.org/

JSON-lib:http://json-lib.sourceforge.net/

Gson:http://code.google.com/p/google-gson/

测试环境:

1、工作电脑:Intel双核E8400 共6GHz,内存4GB,WinXP

2、JSON-lib用最新的JDK15,GSON版本是最新的v1.4,Jackson也是最新的v1.5.5,JDK-v1.6.0_20,JMeter-v2.4

3、测试时不开启任何无关进程,每完成一项测试后关闭JMeter整理内存后,再进行下一项测试,每项测试运行3次,取平均值

4、JSON转Java Bean意为将JSON格式转换成Java类,这个类内包括Map、List、Date、Integer/Long/Double、String等类型的属性,Java Bean转Json则同理。另外,两者互转,每次转换的数据都是随机生成

测试结果:

* 吞吐量的值越大越好,总耗时的值越小越好

JSON转Bean,5个线程并发,约200字节对象,1千万次转换:

  Jackson JSON-lib Gson
TPS 64113.7 8067.4 13952.8
总耗时(秒) 155 1238 700

Bean转JSON,5个线程并发,约200字节对象,1千万次转换:

  Jackson JSON-lib Gson
TPS 54802 15093.2 17308.2
总耗时(秒) 181 661 560

JSON转Bean,5个线程并发,约2K对象,1千万次转换:

  Jackson JSON-lib Gson
TPS 37314 2406.9 3657.50
总耗时(秒) 267 4120 2720

Bean转JSON,5个线程并发,约2K对象,1千万次转换:

  Jackson JSON-lib Gson
TPS 30922.2 4274.8 4977.00
总耗时(秒) 322 2320 2000

测试总结:

1、显而易见,无论是哪种形式的转换,Jackson > Gson > Json-lib。

Jackson的处理能力甚至高出Json-lib有10倍左右

2、JSON-lib似乎已经停止更新,最新的版本也是基于JDK15,而Jackson的社区则较为活跃;

3、在测试性能的同时,又以人肉方式对这三个类库转换的正确性 进行了检查 ,三者均达100%正确

4、JSON-lib在转换诸如Date类型时较为累赘,如以下是两者的转换结果:

JSON-lib:

{"brithday":{"date":17,"day":2,"hours":9,"minutes":24,"month":7,"seconds":26,"time":1282008266398,"timezoneOffset":-480,"year":110}}

Jackson:

{"brithday":1282008123101}

5、JSON-lib依赖commons系列的包及 ezmorph包共 5个,而Jackson除自身的以外只依赖于commons-logging
6、Jackson提供完整基于节点的Tree Model,以及完整的OJM数据绑定功能。

Jackson使用示例:

JacksonMapper:

创建为饿汉式单例模式
,Jackson用于转换的核心类ObjectMapper无需每次都new一个object,官网上的一句话:can reuse, share globally

  1. /**
  2. * @author xuanyin
  3. *
  4. */
  5. public class JacksonMapper {
  6. /**
  7. *
  8. */
  9. private static final ObjectMapper mapper = new ObjectMapper();
  10. /**
  11. *
  12. */
  13. private JacksonMapper() {
  14. }
  15. /**
  16. *
  17. * @return
  18. */
  19. public static ObjectMapper getInstance() {
  20. return mapper;
  21. }
  22. }

JSON转Bean:

  1. ......
  2. String json = "...";
  3. ObjectMapper mapper = JacksonMapper.getInstance();
  4. YourBean bean = mapper.readValue(json, new YourBean().getClass());
  5. ......

Bean转JSON:

  1. ......
  2. YourBean bean = new YourBean();
  3. ......
  4. ObjectMapper mapper = JacksonMapper.getInstance();
  5. StringWriter sw = new StringWriter();
  6. JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
  7. mapper.writeValue(gen, bean);
  8. gen.close();
  9. String json = sw.toString();
  10. ......

* 上面两段代码中的YourBean当然也可以是Java的基本类型

JSON类库Jackson与JSON-lib性能对比[转]的更多相关文章

  1. 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)

    本篇文章主要介绍了"两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)",主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款 ...

  2. java中常见的json解析方法、库以及性能对比

    常见的json解析有原生的JSONObject和JSONArray方法,谷歌的GSON库,阿里的fastjson,还有jackson,json-lib. Gson(项目地址:https://githu ...

  3. 【Json】Jackson将json转换成泛型List

    Jackson将json转换成泛型List 获取泛型类型 /** * 获取泛型类型 * * @return */ protected Class<T> getGenericsType() ...

  4. JSON类库Jackson优雅序列化Java枚举类

    1. 前言 在Java开发中我们为了避免过多的魔法值,使用枚举类来封装一些静态的状态代码.但是在将这些枚举的意思正确而全面的返回给前端却并不是那么顺利,我们通常会使用Jackson类库序列化对象为JS ...

  5. Newtonsoft.Json高级用法DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET即Newtonsoft.Json datatable,dataset,modle,序列化

    原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而 ...

  6. 开源 JSON 库解析性能对比( Jackson / Json.simple / Gson )

    Json 已成为当前服务器与 web 应用之间数据传输的公认标准. 微服务及分布式架构经常会使用 Json 来传输此类文件,因为这已经是 webAPI 的事实标准. 不过正如许多我们习以为常的事情一样 ...

  7. Java常用Json库性能对比

    Java对于处理JSON数据的序列化与反序列化目前常用的类库有Gson.FastJSON.Jackson.jettison以及json-lib.在这里我们将对这些类库在json序列化与反序列化方面的性 ...

  8. Atitit.json类库的设计与实现 ati json lib

    Atitit.json类库的设计与实现 ati json lib 1. 目前jsonlib库可能有问题,可能版本冲突,抛出ex1 2. 解决之道:1 2.1. 自定义json解析库,使用多个复合的js ...

  9. Jackson和fastjson简单用法及性能对比

    背景: Java处理JSON数据有三个比较流行的类库FastJSON.Gson和Jackson.fastjson是阿里做的国有开源Java工具包,jackson是spring mvc内置的json转换 ...

随机推荐

  1. AspNetPager.dll 分页控件使用

    今天在用.net 做网站的时候,用到了DATALIST,但是datalist 没有自带的分页控件,后来在网上找了好长时间,看了aspnetpager.dll这个控件,这个控件挺好用的.我把使用方法写出 ...

  2. android(七)Looper Handler分析

    一.总结 Looper有一个MessageQueue,用于封装消息循环.   Handler封装了消息投递,消息处理等的辅助类 二.分析 1.从Looper的用法开始分析 class LooperTh ...

  3. 【Python】web.py-简单轻量级网页框架python

    简单轻量级网页框架python web.py的安装 python 3.x中安装web.py 最近决定从python2.7转移到3.x上工作. 使用数据库的时候,依然选用了之前比较感兴趣的web.py ...

  4. python中操作mysql

    import pymysql # 连接数据库 connect = pymysql.Connect( host='localhost', port=3306, user='root', passwd=' ...

  5. html 1:1比例显示

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale= ...

  6. linux平台mysql密码设破解

    1.先停止mysql服务 service mysqld stop 2.启动mysql服务 并跳过权限认证 mysqld_safe --skip-grant-tables 3.打开另外一个终端 登录my ...

  7. Python自动发邮件-yagmail库

    之前写过用标准库使用Python Smtplib和email发送邮件,感觉很繁琐,久了不用之后便忘记了.前几天看知乎哪些Python库让你相见恨晚?,看到了yagmail第三方库,学习过程中遇到一些问 ...

  8. 让你分分钟了解Web接口测试

    因为前后端架构分离技术的兴起,接口测试也越来越重要,最近一直想总结下,作为一个近三年的测试人员,接口这个词是耳濡目染的,而开发张口闭口也都是这个接口或那个接口怎么怎么样,自己遇到的bug也很多是接口问 ...

  9. 7.7 Models -- Working with Records

    Modifying Attributes 1. 一旦一条record被加载,你可以开始改变它的属性.在Ember.js对象中属性的行为就像正常的属性.作出改变就像设置你想要改变的属性一样简单: var ...

  10. POST—GET—两种提交方式的区别

        主要区别: 安全性 长度限制 数据结构.   总结起来: get方式:以URL字串本身传递数据参数,在服务器端可以从UERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来 ...