前言

前段时间@寒江不钓同学针对国内Top500和Google Play Top200 Android应用做了全面的分析(具体分析报告见文末的参考资料),其中有涉及到对主流应用使用json框架Gson、FastJson、Jackson的统计,具体情况如下:


可见无论是在国内还是国际上,有很多应用会用到json框架,其中谷歌提供的gson框架是被使用得最多的,老牌json框架Jackson属于小众,阿里出品的FastJson在国内的使用情况仅次于Gson,但在国际上却基本没有APP在使用。

(前言摘自https://zhuanlan.zhihu.com/p/21919300)
 
 
被使用得最多并不代表就一定是最优方案,在使用json框架的过程中,我们最关注的应该是效率和易用性的问题。由于本人对Jackson不太熟悉,Jackson也比较小众,而且Jackson依赖包是三个中最大的,效率优势不明显,所以
我首先排除了Jackson。
 
1.Google的Gson(框架描述摘自http://www.cnblogs.com/kunpengit/p/4001680.html)
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,
但自从在2008年五月公开发布第一版后已被许多公司或用户应用。
Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。
类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。
2.阿里巴巴的FastJson
Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,能够直接跑在JDK上。
FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。
 
Gson、FastJson到底哪一个效率更高,速度更快?(效率比较摘自http://blog.csdn.net/zml_2015/article/details/52165317)
 
来个单元测试:
 
循环50次再求平均值:

@org.junit.Test
public void TestSpeed() throws Exception {

List<Foods> foods = foodDao.selectAll(Foods.class);

System.out.println("-------------gson-----------");
long gsonStart = System.currentTimeMillis();
gsonC(foods);//用Gson进行拆包 和 解析 并循环操作50次
long gsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (gsonEnd - gsonStart) / 50);
System.out.println("-------------gson-----------");

System.out.println("-------------FastJson-----------");
long fastStart = System.currentTimeMillis();
fastJsonC(foods);// 用FastJson进行拆包 和 解析 并循环操作50次
long fastEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (fastEnd - fastStart) / 50);
System.out.println("-------------FastJson-----------");

System.out.println("-------------JSON-----------");
long jsonStart = System.currentTimeMillis();
jsonC(foods);// 用org.json进行拆包 和 解析 并循环操作50次
long jsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (jsonEnd - jsonStart) / 50);
System.out.println("-------------JSON-----------");

}

调用的方法必须是 synchronized 同步的,即运行完该方法后才执行下面的代码

private synchronized void jsonC(List<Foods> foods) throws Exception {
for (int j = 0; j < 50; j++) {
String jsonString = JsonTools.createJsonString("json", foods);
JSONObject object = new JSONObject(jsonString);
JSONArray array = object.getJSONArray("json");
List<Foods> list2 = new ArrayList<Foods>();
for (int i = 0; i < array.length(); i++) {

JSONObject foodObject = (JSONObject) array.get(i);
Foods foods2 = new Foods(foodObject.getInt("id"),
foodObject.getString("cookclass"),
foodObject.getString("name"),
foodObject.getString("description"),
foodObject.getString("food"),
foodObject.getString("img"),
foodObject.getString("images"),
foodObject.getString("keywords"),
foodObject.getString("message"),
foodObject.getString("url"));
list2.add(foods2);
}
String s3 = list2.toString();
}
}

private synchronized void fastJsonC(List<Foods> foods) {
for (int i = 0; i < 50; i++) {
String fastString = FastJsonTools.createJsonString(foods);
String s2 = FastJsonTools.createJsonToListBean(fastString,
Foods.class).toString();
}
}

private synchronized void gsonC(List<Foods> foods) {
for (int i = 0; i < 50; i++) {
String gsonString = GsonTools.createJsonString(foods);
String s1 = GsonTools.StringTolist(gsonString, Foods[].class)
.toString();
}
}

然后贴一下解析1万条数据2万条数据100条数据各个类库所用的的平均时间(这个时间不包括查询数据库所用的时间)
1.1万 

2. 2万 

3.100条

经过这次测试之后,确实验证了阿里巴巴的FastJson相对来说是挺快的。因为fastjson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,所以我决定还是fastjson和gson并用,

不要求效率的话就用gson,要求高效率的话就用fastjson。

Json解析工具的选择的更多相关文章

  1. Json解析工具Jackson(使用注解)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...

  2. JSON 解析工具的封装(Java)

    JSON 解析工具的封装(Java) 一直想有一个属于自己的JSON工具,今天终于弄好了..... 1.添加pom依赖包 <!--json解析--> <dependency> ...

  3. 自定义Json解析工具

    此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...

  4. java后台常用json解析工具问题小结

    若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...

  5. JSON解析工具比较,主要GSON和FastJSON

    JSON解析工具比较,主要GSON和FastJSON 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确 ...

  6. Gson json解析工具

    json 解析工具 ,谷歌出品 对象转换字符串 HashMap<String,String> hashMap = new HashMap<String, String>();  ...

  7. [转] 各种Json解析工具比较 - json-lib/Jackson/Gson/FastJson

    JSON技术的调研报告 一 .各个JSON技术的简介和优劣1.json-libjson-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括com ...

  8. JSON解析工具-org.json使用教程

    转自:http://www.open-open.com/lib/view/open1381566882614.html 一.简介  org.json是Java常用的Json解析工具,主要提供JSONO ...

  9. Json解析工具Jackson(使用注解)--jackson框架自定义的一些json解析注解

    Json解析工具Jackson(使用注解)--jackson框架自定义的一些json解析注解 @JsonIgnoreProperties 此注解是类注解,作用是json序列化时将Javabean中的一 ...

随机推荐

  1. python_单元测试unittest

    Python自带一个单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 步骤1:首先引入unittest模块--import un ...

  2. DDD设计中的Unitwork与DomainEvent如何相容?

    最近在开发过程中,遇到了一个场景,甚是棘手,在这里分享一下.希望大家脑洞大开一起来想一下解决思路.鄙人也想了一个方案拿出来和大家一起探讨一下是否合理. 一.简单介绍一下涉及的对象概念 工作单元:维护变 ...

  3. AutoMapper(六)

    返回总目录 List和数组 AutoMapper只要求元素类型的配置而不要求可能会用到的任何数组或者list类型.比如,我们有一个简单的源和目标类型: public class Source{ pub ...

  4. 使用ENode框架前您需要了解的东西(初稿)

    选择ENode意味着什么可能很多人还不太清楚.我简单整理了一下: 意味着你选择了:你需要做DDD领域建模.选择了事件驱动的架构.选择了CQRS架构.选择了最终一致性.选择了事件溯源.选择了分布式.这些 ...

  5. 基于java的分布式爬虫

    分类 分布式网络爬虫包含多个爬虫,每个爬虫需要完成的任务和单个的爬行器类似,它们从互联网上下载网页,并把网页保存在本地的磁盘,从中抽取URL并沿着这些URL的指向继续爬行.由于并行爬行器需要分割下载任 ...

  6. HTML自定义对象与属性(谷歌,火狐,IE9浏览器没问题)

    1.自定义标签 <zqz>asdas</zqz> <style> zqz{ color:red; } </style> 页面变色 2.自定义标签的hov ...

  7. $(document).ready() 与window.onload的区别

    1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕. 2.编写个数不同 ...

  8. OpenCASCADE Ring Type Spring Modeling

    OpenCASCADE Ring Type Spring Modeling eryar@163.com Abstract. The general method to directly create ...

  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(13)-系统日志和异常的处理③

    系列目录 上一节我们讲了如何捕获异常和记录日志,这一节我们讲,没有捕获的或者忘记捕获的异常包括404错误等,我们统一处理这个异常. 这一讲是利用 Application_Error 捕获所有异常,全局 ...

  10. T-SQL:毕业生出门需知系列(九)

    <SQL 必知必会>读书笔记 -- 第9课 汇总数据 9.1 聚集函数:对某些行运行的函数,计算并返回一个值 案例: -- 确定表中函数 -- 获得表中某些行的和 -- 找出表列的最大值. ...