怎么选择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. Oracle启动和停止

    概述 只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库. 在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库. 虽然数据库正常运行,但如果 ...

  2. PM学习梳理--搭建产品架构

  3. Mybatis批量更新比较

    https://blog.csdn.net/lu1024188315/article/details/78758943

  4. K/3 Cloud移动BOS开发技巧 -- K/3 Cloud多数据中心时如何支持发布到云之家.

    我们知道K/3 Cloud和云之家进行集成,在管理中心里面有个设置,移动账套启用,只能支持一个账套启用那么能不能支持两个账套部署到云之家中呢?其实移动BOS平台默认是支持,答案就在发布到云之家的菜单中 ...

  5. 【Mybatis】MyBatis之表的关联查询(五)

    本章介绍Mybatis之表的关联查询 一对一关联 查询员工信息以及员工的部门信息 1.准备表employee员工表,department部门表 CREATE TABLE `employee` ( `i ...

  6. node 项目中 koa2 环境搭建 以及项目发布

    环境搭建: 1.Koa 必须使用 7.6 以上的版本.如果你的版本低于这个要求,就要先升级 Node. 查看node版本方法:node -v 2.使用koa-generator生成器生成项目 安装ko ...

  7. js生成tree形组织机构下拉框

    1.首先我们正常数据是如下所示: [ { id: 1, pid: 0, name: '公司组织' }, { id: 2, pid: 1, name: '总经办' }, { id: 3, pid: 1, ...

  8. enum枚举类

    枚举类可用于定义常量ch01 package edu.nf.demo.ch01; /** * * 枚举类型 */ public enum Color { /** * 红色 */ RED, /** * ...

  9. Django认证系统

    一.cooie与session 1.1 cookie与session cooie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又要保持状态,因此cookie就是在这样的一个场 ...

  10. Cbv源码简单分析图

    重点:cbv源码的简单分析(有后续)