怎么选择JSON库?

从整体测试结果来看,总结如下:

  • 用于序列化、反序列的功能,数量量小,吞吐量不大于10000每秒的,选择gson;
  • 用于解析JSON的,还是用Fastjson吧,虽然听说坑很多。
  • 数据量大的时候,用Fastjson吧;
  • 其他情况Jackson是不错的选择。

对Gson库的进一步研究

通过对gson库中gsonbuilder进行一些设置,可优化序列化和反序列化的运行时间。

要看具体数据情况,下面有个例子,大概比无设置的情况快40%左右

 Gson gson= new GsonBuilder()
.serializeNulls() //当字段值为空或null时,依然对该字段进行转换
.setDateFormat(Utils.defaultDatePattern) //时间转化为特定格式
.create();

gson库对各个对象、集合的支持都不错(比Fastjson要好),其主要的原理是java的反射机制:

通过阅读Gson源码可得出以下的结论:
1)先 获取type获取Java的java.lang.reflect.Constructor,构造器为默认构造器
2)通过Constructor的newInstance()来创建一个type类型的Java对象。
3)循环遍历json中的键值对,获取key和value;并且获取key对应的Java中的Field
4)将value通过Filed的set(Java,value)方法,将value赋值给Javaben对应的Field中去

这跟使用new的原理有点类似,new一个对象时,使用的递归的方式,gson是循环的方式。总之,Gson用反射解析json ,就是通过反射创建Java对象,循环遍历该对象的Field,并通过Field的set(object,value)方法来对Java object的Field赋值。其实就是简单的反射的应用,Gson只不过是做了简单而有效的封装处理来完成了这其中的操作。

所以Gson和JVM的效率有关。

JSON库的使用研究(三)的更多相关文章

  1. JSON库的使用研究(二)

    Java 中哪个 JSON 库的解析速度是最快的? 这个问题有意义吗?各个JSON库的性能差距不大?呵呵,差距大不大,自己往下看吧! 这个问题我们应该分为以下四个维度进行研究: 1.序列化 2.反序列 ...

  2. JSON库的使用研究(一)

    最近用到JSON,收集了一些资料,整理如下: 选择一个合适的JSON库要从多个方面进行考虑: 字符串解析成JSON性能 字符串解析成Java Object性能 Java Object转JSON性能 集 ...

  3. C++的开源跨平台日志库glog学习研究(三)--杂项

    在前面对glog分别做了两次学习,请看C++的开源跨平台日志库glog学习研究(一).C++的开源跨平台日志库glog学习研究(二)--宏的使用,这篇再做个扫尾工作,算是基本完成了. 编译期断言 动态 ...

  4. 快速上手Unity原生Json库

    现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的J ...

  5. 1. 初识Jackson -- 世界上最好的JSON库

    要想人前显贵,必须背后受罪.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中 ...

  6. Java 下的 JSON库性能比较:JSON.simple

    JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它 ...

  7. JSON库之性能比较:JSON.simple VS GSON VS Jackson VS JSONP

    从http://www.open-open.com/lib/view/open1434377191317.html 转载 Java中哪个JSON库的解析速度是最快的? JSON已经成为当前服务器与WE ...

  8. Java几种常用JSON库性能比较

    本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能. 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库.但是百闻不如一见,只有自己亲手测试过的才是最值得相信的. JSON ...

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

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

随机推荐

  1. Idea增加Idiff merger工具

    File -- setting --- tolls -- diff & merge 选择使用外部diff工具和外部merge工具,选择winmerge工具目录. 就可以再version con ...

  2. mac电脑Git提交代码到Github提示git-credential-osxkeychain 验证解决方案

    ## 啊哈哈 这个简单,直接给出当前mac电脑登录账号密码即可,^_*,拿走不谢!!

  3. 口试Linq题

    LINQ to SQL与IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列. LINQ to Object和LINQ to SQL有何区别 ...

  4. 团队-爬虫豆瓣top250项目-模块测试过程

    模块测试: 项目托管平台地址:https://github.com/gengwenhao/GetTop250.git 模块测试:"获取250排名的全部电影信息"功能,测试方法:手动 ...

  5. mui框架下拉刷新和上拉刷新

    当初写的时候,是用的谷歌浏览器测试的,都可以正常刷新,下载到手机上面,在ios是可以刷新的,在安卓上面就刷新不了,就是拉不动,后来慢慢排除不是HTML的原因,是上下拉代码有问题,刚开始看的时候也没问题 ...

  6. 20175316 盛茂淞 Arrays和String单元测试

    Arrays和String单元测试 具体描述: 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 String类 charAt split Arr ...

  7. Django之发送邮件

    Django的发送邮件是基于django的一个组件进行操作的,EmailMessage 基本使用方法: def send_html_mail(subject, html_content, from_a ...

  8. 02.02.01 第1章 简介及基础操作(Power BI商业智能分析)

    02.02.01.01 powerbi简介 00:10:59 02.02.01.02 query数据导入 00:03:26 具体操作实例如下: 02.02.01.03导入access数据 00:05: ...

  9. 解决更新ssh后在/etc/init.d下无sshd的问题

    1.将远程服务器的/etc/init.d/ssd  文件拷贝到本地 scp /etc/init.d/ssh  root@IP地址:/etc/init.d 2.vi /etc/init.d/sshd 3 ...

  10. vs C++ scanf 不安全

    项目->属性-> c/c++->预处理器->预处理器定义->加入下面这句: _CRT_SECURE_NO_DEPRECATE