市桥有经验的网站建设,wordpress图片搬家,微信小程序流量变现推广方法,做网站优化的弊端本篇文章主要介绍了两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)#xff0c;主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)方面的内容#xff0c;对于两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)感兴趣的同学可…本篇文章主要介绍了两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)方面的内容对于两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)感兴趣的同学可以参考一下。 近日做一些性能优化工作在挑选JSON类库时发现除了一般常用的JSON-lib外还有一款号称性能最快的JSON处理器Jackson于是用上了刚学会的JMeter对这两个类库进行了简单的性能对比。 Jacksonhttp://jackson.codehaus.org/ JSON-libhttp://json-lib.sourceforge.net/ Gsonhttp://code.google.com/p/google-gson/ 测试环境 1、工作电脑Intel双核E8400 共6GHz内存4GBWinXP 2、JSON-lib用最新的JDK15GSON版本是最新的v1.4Jackson也是最新的v1.5.5JDK-v1.6.0_20JMeter-v2.4 3、测试时不开启任何无关进程每完成一项测试后关闭JMeter整理内存后再进行下一项测试每项测试运行3次取平均值 4、JSON转Java Bean意为将JSON格式转换成Java类这个类内包括Map、List、Date、Integer/Long/Double、String等类型的属性Java Bean转Json则同理。另外两者互转每次转换的数据都是随机生成 测试结果 * 吞吐量的值越大越好总耗时的值越小越好 JSON转Bean5个线程并发约200字节对象1千万次转换 JacksonJSON-libGsonTPS64113.78067.413952.8总耗时(秒)1551238700 Bean转JSON5个线程并发约200字节对象1千万次转换 JacksonJSON-libGsonTPS5480215093.217308.2总耗时(秒)181661560 JSON转Bean5个线程并发约2K对象1千万次转换 JacksonJSON-libGsonTPS373142406.93657.50总耗时(秒)26741202720 Bean转JSON5个线程并发约2K对象1千万次转换 JacksonJSON-libGsonTPS30922.24274.84977.00总耗时(秒)32223202000 测试总结 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 Java代码 /** * author xuanyin * */ public class JacksonMapper { /** * */ private static final ObjectMapper mapper new ObjectMapper(); /** * */ private JacksonMapper() { } /** * * return */ public static ObjectMapper getInstance() { return mapper; } } JSON转Bean Java代码 ...... String json ...; ObjectMapper mapper JacksonMapper.getInstance(); YourBean bean mapper.readValue(json, new YourBean().getClass()); ...... Bean转JSON Java代码 ...... YourBean bean new YourBean(); ...... ObjectMapper mapper JacksonMapper.getInstance(); StringWriter sw new StringWriter(); JsonGenerator gen new JsonFactory().createJsonGenerator(sw); mapper.writeValue(gen, bean); gen.close(); String json sw.toString(); ...... * 上面两段代码中的YourBean当然也可以是Java的基本类型 近日做一些性能优化工作在挑选JSON类库时发现除了一般常用的JSON-lib外还有一款号称性能最快的JSON处理器Jackson于是用上了刚学会的JMeter对这两个类库进行了简单的性能对比。 Jacksonhttp://jackson.codehaus.org/ JSON-libhttp://json-lib.sourceforge.net/ Gsonhttp://code.google.com/p/google-gson/ 测试环境 1、工作电脑Intel双核E8400 共6GHz内存4GBWinXP 2、JSON-lib用最新的JDK15GSON版本是最新的v1.4Jackson也是最新的v1.5.5JDK-v1.6.0_20JMeter-v2.4 3、测试时不开启任何无关进程每完成一项测试后关闭JMeter整理内存后再进行下一项测试每项测试运行3次取平均值 4、JSON转Java Bean意为将JSON格式转换成Java类这个类内包括Map、List、Date、Integer/Long/Double、String等类型的属性Java Bean转Json则同理。另外两者互转每次转换的数据都是随机生成 测试结果 * 吞吐量的值越大越好总耗时的值越小越好 JSON转Bean5个线程并发约200字节对象1千万次转换 JacksonJSON-libGsonTPS64113.78067.413952.8总耗时(秒)1551238700 Bean转JSON5个线程并发约200字节对象1千万次转换 JacksonJSON-libGsonTPS5480215093.217308.2总耗时(秒)181661560 JSON转Bean5个线程并发约2K对象1千万次转换 JacksonJSON-libGsonTPS373142406.93657.50总耗时(秒)26741202720 Bean转JSON5个线程并发约2K对象1千万次转换 JacksonJSON-libGsonTPS30922.24274.84977.00总耗时(秒)32223202000 测试总结 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-logging6、Jackson提供完整基于节点的Tree Model以及完整的OJM数据绑定功能。 Jackson使用示例 JacksonMapper 创建为饿汉式单例模式 Jackson用于转换的核心类ObjectMapper无需每次都new一个object官网上的一句话can reuse, share globally Java代码 /** * author xuanyin * */ public class JacksonMapper { /** * */ private static final ObjectMapper mapper new ObjectMapper(); /** * */ private JacksonMapper() { } /** * * return */ public static ObjectMapper getInstance() { return mapper; } } JSON转Bean Java代码 ...... String json ...; ObjectMapper mapper JacksonMapper.getInstance(); YourBean bean mapper.readValue(json, new YourBean().getClass()); ...... Bean转JSON Java代码 ...... YourBean bean new YourBean(); ...... ObjectMapper mapper JacksonMapper.getInstance(); StringWriter sw new StringWriter(); JsonGenerator gen new JsonFactory().createJsonGenerator(sw); mapper.writeValue(gen, bean); gen.close(); String json sw.toString(); ...... * 上面两段代码中的YourBean当然也可以是Java的基本类型 文章不足之处欢迎大家留言指正) 11 楼 wangym 2010-08-18 引用 wangliang_5290 写道 wangym 写道 wangliang_5290 写道 我碰到一个问题要将字符串String json {a:1, b:2};转化为 Map, 如果用Jackson的话对字符串格式有严格要求必须为String json {\a\:1, \b\:2};否则报错觉得不爽。不知道是对Json了解不够呢 还是Jackson就是这么要求的 在JAVA里定义这样一个String自然是需要\给后面的引号进行转义无论是用哪个JSON类库都一样但在实际应用中没有这个问题。 实际应用中json串不一定是在java中定义的有可能是从页面传过来的java只是负责解析。我以前用的是json-lib没有问题 但是换成jackson后出现这个问题。不知道是不是对jackson的API研究不够1.json-lib 以下写法没有问题 Java代码 Map map JSONObject.fromObject({a:1, b:2}); 2.jackson 以下写法报异常 Java代码 Map map new ObjectMapper().readValue({a:1, b:2}, HashMap.class); 必须写成 Java代码 Map map new ObjectMapper().readValue({\a\:1, \b\:2}, HashMap.class); 不好意思一开始没明白你的意思请开启支持字段名称不带引号的转换模式,默认是关闭的.即将上面报异常的那句改成这样 Java代码 Map map new ObjectMapper().configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true).readValue({a:1, b:2}, HashMap.class); 24 楼 wangym 2011-01-18 引用 JSON转POJO时若JSON中的某个字段在POJO中未定义在默认情况下会抛异常转换失败只要增加这个配置 Java代码 Feature.FAIL_ON_UNKNOWN_PROPERTIES, false 就可以转换正常即只转换定义的字段未定义的字段忽略。转载于:https://www.cnblogs.com/xujishou/p/6929802.html