怎么选择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的效率有关。