FastJson、Gson和Jackson

FastJson、Gson和Jackson

Scroll Down

Jackson

1.简介:

Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。

解析原理:

基于事件驱动,与GSON相同,先创建一个对应于JSON数据的JavaBean类就可以通过简单的操作解析出所需JSON数据。但和Gson解析不同的是,GSON可按需解析,即创建的JavaBean类不一定完全涵盖所要解析的JSON数据,按需创建属性,但Jackson解析对应的JavaBean必须把Json数据里面的所有key都有所对应,即必须把JSON内的数据所有解析出来,无法按需解析。但Jackson的解析速度和效率都要比GSON高

优势

  • 解析效率最高
  • 在数据量大的情况优势尤为明显、占存少

缺点

必须完全解析文档,如果要按需解析的话可以拆分Json来读取,操作和解析方法复杂;

推荐使用情景

适用于需要处理超大型JSON文档、不需要对JSON文档进行按需解析、、性能要求较高的场合

Gson

简介:

Google提供的用来java对象和JSON数据之间进行映射的JAVA类库,可以将一个JSON字符转成一个java对象,反过来也OK。

解析原理:

优势

  • 快速,高效
  • 代码量少
  • 面向对象
  • 数据传输解析方便

注意事项

  • 内部嵌套的类必须是static的,要不然解析会出错;
  • 类里面的属性名必须跟Json字段里面的Key是一模一样的;
  • 内部嵌套的用[]括起来的部分是一个List,所以定义为 public List< B> b,而只用{}嵌套的就定义为 public C c,是不是很简单,而且现在android studio上可以直接用插件生成实体类,那更加方便了

FastJson

简介:

FastJson是阿里巴巴公司提供的一个用Java语言编写的高性能功能完善的JSON库,该库涉及的最基本功能就是序列化和反序列化。Fastjson支持java bean的直接序列化,同时也支持集合、Map、日期、Enum和泛型等的序列化。你可以使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化,常用的序列化操作都可以在JSON类上的静态方法直接完成。Fastjson采用独创的算法,将parse的速度提升到极致,号称超过所有Json库。而且,使用Fastjson解析时,除了需要使用Fastjson所提供的jar包外,再不需要额外的jar包,就能够直接跑在JDK上。

解析原理:

基于事件驱动,与GSON相同,先创建一个对应于JSON数据的JavaBean类就可以通过简单的操作解析出所需JSON数据。但和Gson解析不同的是,GSON可按需解析,即创建的JavaBean类不一定完全涵盖所要解析的JSON数据,按需创建属性,但Jackson解析对应的JavaBean必须把Json数据里面的所有key都有所对应,即必须把JSON内的数据所有解析出来,无法按需解析。但Jackson的解析速度和效率都要比GSON高

优势

  • 快速FAST(比任何一款都快)
  • 面向对象
  • 功能强大(支持普通JDK类任意java bean Class,Collection,Map,Date或者enum)
  • 零依赖(只需要有JDK即可)
  • 支持注解,全类型序列化

FastJSON、Gson和Jackson性能对比

JSON序列化(Object => JSON)

类库样本数量执行次数最长时间(毫秒)最短时间(毫秒)平均时间(毫秒)
FastJSON100000102291.221416.701454.93
Jackson100000101980.92841.91880.82
Gson100000102383.021469.081520.38

从测试数据可知,FastJSON和GsonJSON序列化的速度差不多,Jackson是最快的(用时Gson少大约600毫秒)。

JSON反序列化(JSON => Object)

类库样本数量执行次数最长时间(毫秒)最短时间(毫秒)平均时间(毫秒)
FastJSON100000107942.316340.556526.41
Jackson100000107957.226623.856815.41
Gson100000108235.157006.067364.75

从测试数据可知,三个类库在反序列化上性能比较接近,Gson稍微差一些。

总结

把Java对象JSON序列化,Jackson速度最快,在测试中比Gson快接近50%,FastJSON和Gson速度接近。
把JSON反序列化成Java对象,FastJSON、Jackson速度接近,Gson速度稍慢,不过差距很小。