JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,一般情况我们对于JSON解析构造的性能并不需要过于关心,除非是在性能要求比较高的系统。
目前对于Java开源的JSON类库有很多种,下面我们取三个常用的JSON库进行性能测试对比,同时根据测试结果分析如果根据实际应用场景选择最合适的JSON库。
四个JSON类库分别为:Gson,FastJson,Jackson,Json-lib。
简单介绍下四个类库的身份背景。
- Gson(项目地址:https://github.com/google/gson)。Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
- FastJson(项目地址:https://github.com/alibaba/fastjson)。Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。无依赖,不需要例外额外的jar,能够直接跑在JDK上。FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。
- Jackson(项目地址:https://github.com/FasterXML/jackson)。相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式。
- Json-lib(项目地址:http://json-lib.sourceforge.net/index.html)。json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。json-lib在功能和性能上面都不能满足现在互联网化的需求。
选择一个合适的JSON库要从多个方面进行考虑:
- 字符串解析成JSON性能
- 字符串解析成JavaBean性能
- JavaBean构造JSON性能
- 集合构造JSON性能
- 易用性
对于前四条其实都是从JSON的解析构造性能角度考虑,而最后一条则是考虑易用性,这点对于开发者来说其实也是需要考虑的一个问题,如果该库的API使用难度大,或者很复杂,那么不建议使用,毕竟JSON解析的性能差异并不大。下面的测试结果针对四个不同数量级的JSON字符串,以及分别测试上面提到的前四条性能,结果如下:
Json-lib在数据量在10W时OOM了,内存开到1G都不行,所以直接Pass了。
从上面图表可以看到:
- 字符串解析成JavaBean:当数据量较少时首选FastJson,数据量较大使用Jackson。但是Jackson无法堆一个对象集合进行解析,只能转成一个Map集合,这点Gson和FastJson处理的比较好。
- 字符串解析成JSON:当数据量较少时首选FastJson,数据量较大使用Jackson。
- JavaBean构造JSON:当数据量较少时选择Gson,数据量较大可使用Jackson。
- 集合构造JSON:首先Jackson,其次Fastjson。
上面是从性能角度分析四种JSON类库,从易用性角度来分析的话,FastJson的API设计的最简单,最方便使用,直接使用JSON的两个静态方法即可完成四种操作;而Gson和Jackson都需要new一个对象,虽然这个对象可以复用,但是在实际使用过程中还需要用一个全局变量来保存改变量,同时API设计的也不是很好理解,对于FastJson来说复杂的API是因为他支持流式解析,适合对JSON进行大量且复杂的操作,但是实际应用中对于JSON的操作都是简单的解析成JavaBean,然后JavaBean序列化成JSON字符串即可,复杂的操作很少。
下面从我自己实际的应用场景出发,考虑该如何选择合适的JSON类库。
应用场景:游戏服务器,基本是对客户端发送过来的JSON格式字符串解析成JavaBean,然后将封装好的指令转成JSON字符串返回给客户端,这里考虑到JavaBean转成JSON与集合转成JSON的性能差异,所以直接使用集合进行转成JSON,避免使用JavaBean。
考虑上述场景适合使用FastJson进行JSON字符串解析,Jackson将集合转成JSON格式字符串。
浅尝辄止,欢迎批评指出。
相关推荐
Elevate是一个专门针对Swift设计的高级JSON解析框架,它的目标是让JSON解析变得更简单、更可靠,并且具有高度的可组合性。 Elevate的核心理念是通过类型安全的方式来解析JSON,避免了传统的字符串匹配和强制类型...
**Android JSON解析框架GSON详解** 在Android应用开发中,数据交换经常采用JSON格式,因为它轻量级、易于阅读和编写,并且被广泛支持。为了高效地解析和生成JSON,Google提供了一个强大的库——GSON。GSON允许将...
Swift-Jsonify是一个专为Swift开发者设计的轻量级、易于使用的JSON解析框架,它极大地简化了在iOS、macOS、watchOS以及tvOS平台上处理JSON数据的过程。这个框架的目标是提供一个优雅、直观的API,让开发人员能够快速...
总的来说,选择合适的JSON解析框架对于提升iOS应用的性能和开发效率至关重要。"JSON v3.0beta2 (iOS)"框架可能是一个值得考虑的选择,它提供了高效的解析方法和丰富的功能,使得处理JSON数据变得更加便捷。
在Java开发中,为了方便地解析和生成JSON,我们常常会使用到JSON解析框架。这些框架可以帮助开发者将Java对象转换成JSON字符串,或者将JSON文本反序列化为Java对象。标题中的“Json解析架包”可能指的是这类工具的...
总之,这次若依框架前端form-generator的升级和添加JSON解析器是一个涉及到多个技术层面的过程,包括但不限于JSON解析、前端组件升级、兼容性测试以及UI调整。这样的升级能够使开发团队利用更先进的工具,提高开发...
在C++中解析JSON数据,通常需要借助特定的库或框架,而CJson就是这样一个专门用于C++的JSON解析库。 CJson框架是C++中解析和生成JSON的一种高效解决方案。它由David Grigsby开发,设计简洁,API直观,适合嵌入到...
Swift-SexyJson是一个专为Swift 3设计的开源库,致力于简化JSON解析的过程,让开发者在iOS和Mac OS X平台上能快速、高效地处理JSON数据。本文将深入探讨SexyJson的特点、用法以及如何在项目中集成和使用它。 一、...
JSON解析.dll是Unity中用于处理JSON数据的库,它允许开发者将JSON字符串转化为C#对象或者将C#对象转化为JSON字符串。 在Unity与WebGL的结合使用中,由于WebGL的目标是浏览器环境,因此存在一些特定的限制。例如,...
"最全的json解析JAR包"可能包含了上述提到的多个库的JAR文件,这使得开发者可以在不安装额外框架的情况下,根据项目需求选择合适的JSON解析工具。 6. 引入和使用: 要在Java项目中使用这些库,通常需要将JAR文件...
`com.force.json`是一个针对.NET平台的高性能JSON库,由Salesforce公司开发,它提供了快速且内存效率高的JSON解析和生成功能。这个库适用于那些需要高效处理大量JSON数据的应用场景。 首先,我们需要了解JSON的基本...
Swift标准库中的`JSONSerialization`是基础的JSON解析和序列化工具。它提供了`data`到`JSON`以及`JSON`到`data`的转换。虽然简单易用,但它的性能可能不如专门的JSON库高效。 2. **SwiftyJSON** SwiftyJSON是...
本篇文章将详细讲解JSON解析过程中所依赖的包,以及它们各自的作用。 首先,"json-bin-2.4-jdk15.jar"是核心包,它可能是Json-lib的一个版本。Json-lib是一个Java库,它可以将JSON转换为Java对象,反之亦然。这个库...
Retrofit是另一种流行的Android网络库,它允许更优雅地处理网络请求和响应,包括JSON解析。添加依赖: ```groovy implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation '...
在VB6中,由于缺乏内置的JSON支持,开发者通常会寻找第三方组件,如JSONConverter.bas模块,这是一个非常流行且广泛使用的VB6 JSON解析器。这个模块提供了将VB6的数据结构转换为JSON字符串,以及将JSON文本解析为VB6...
// Json 解析框架:https://github.com/google/gson implementation ' com.google.code.gson:gson:2.8.5 ' } 使用文档 请使用框架返回的Gson对象来代替项目中的Gson对象 // 获取单例的 Gson 对象(已处理容错) ...
二、OC中JSON解析 在OC中,我们通常使用苹果提供的Foundation框架中的NSJSONSerialization类来解析JSON数据。以下是一些关键方法: 1. `+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)...
在.NET框架中,有多种方式可以解析和序列化JSON数据,这些方法为开发者提供了便利,使得处理JSON数据变得更加简单。 一、JSON.NET JSON.NET是James Newton-King开发的一个开源库,它为.NET Framework、.NET Core...
iOS下解析json数据,自己亲自使用过,挺好用的。 使用JSONKit的解析方法:(需导入包:#import "JSONKit/JSONKit.h") - (void)printJson{ //如果json是“单层”的,即value都是字符串、数字,可以使用...
"IOS json解析"这个主题涵盖了如何在iOS应用中处理JSON数据,尤其是利用苹果内置的技术进行解析。本文将深入探讨JSON解析的基本概念、苹果提供的解析API以及如何在实际项目中运用。 首先,我们需要了解JSON的结构。...