全解史上最快的JOSN解析库 - alibaba Fastjson

JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格式,应该在一个程序员的开发生涯中是常接触的。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

Java是面向对象的语言,所以我们更多的在项目中是以对象的形式处理业务的,但是在传输的时候我们却要将对象转换为 JSON 格式便于传输,而且 JSON 格式一般能解析为大多数的对象格式,而不在乎编程语言。

全解史上最快的JOSN解析库 - alibaba Fastjson

现在主流的对象与 JSON 互转的工具很多,我们主要介绍今天的主角,阿里巴巴的开源库 - Fastjson。Fastjson是一个Java库,可用于将Java对象转换为其JSON表示。它还可用于将JSON字符串转换为等效的Java对象。Fastjson可以处理任意Java对象,包括您没有源代码的预先存在的对象。

全解史上最快的JOSN解析库 - alibaba Fastjson

什么是 Fastjson?

阿里官方给的定义是, fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。

Fastjson 的优点

速度快
fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。

使用广泛
fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。

测试完备
fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。

使用简单
fastjson的 API 十分简洁。

功能完备
支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

怎么获得 Fastjson

你可以通过如下地方下载fastjson:

maven中央仓库:

Sourceforge.net : https://sourceforge.net/projects/fastjson/files/

在maven项目的pom文件中直接配置fastjson依赖

fastjson最新版本都会发布到maven中央仓库,你可以直接依赖。

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>x.x.x</version> </dependency>

其中x.x.x是版本号,根据需要使用特定版本,建议使用最新版本。

Fastjson 主要的API

Fastjson入口类是 com.alibaba.fastjson.JSON,主要的 API 是 JSON.toJSONString 和 parseObject。

package com.alibaba.fastjson; public abstract class JSON { // Java对象转换为JSON字符串 public static final String toJSONString(Object object); //JSON字符串转换为Java对象 public static final <T> T parseObject(String text, Class<T> clazz, Feature... features); }

序列化:

String jsonString = JSON.toJSONString(obj);

反序列化:

VO vo = JSON.parseObject("...", VO.class);

泛型反序列化:

import com.alibaba.fastjson.TypeReference; List<VO> list = JSON.parseObject("...", new TypeReference<List<VO>>() {}); Fastjson 的性能

fastjson是目前java语言中最快的json库,比自称最快的jackson速度还要快,第三方独立测试结果看这里:https://github.com/eishay/jvm-serializers/wiki。

自行做性能测试时,需关闭循环引用检测的功能。

JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect) VO vo = JSON.parseObject("...", VO.class, Feature.DisableCircularReferenceDetect)

另外,Fastjson 比 Gson 快大约6倍,测试结果可以看这里:

Checking correctness… [done] Pre-warmup… java-built-in hessian kryo protostuff-runtime avro-generic msgpack json/jackson/databind json/jackson/databind-strings json/jackson/db-afterburner json/google-gson/databind json/svenson-databind json/flexjson/databind json/fastjson/databind smile/jackson/databind smile/jackson/db-afterburner smile/protostuff-runtime bson/jackson/databind xml/xstream+c xml/jackson/databind-aalto [done] pre. create ser deser shal +deep total size +dfl java-built-in 63 5523 27765 28084 28162 33686 889 514 hessian 64 3776 6459 6505 6690 10466 501 313 kryo 63 809 962 937 1001 1810 214 133 protostuff-runtime 62 671 903 920 957 1627 241 151 avro-generic 436 1234 1122 1416 1760 2994 221 133 msgpack 61 789 1369 1385 1449 2238 233 146 json/jackson/databind 60 1772 3089 3113 3246 5018 485 261 json/jackson/databind-strings 64 2346 3739 3791 3921 6267 485 261 json/jackson/db-afterburner 64 1482 2220 2233 2323 3805 485 261 json/google-gson/databind 64 7076 4894 4962 5000 12076 486 259 json/svenson-databind 64 5422 12387 12569 12468 17890 495 266 json/flexjson/databind 62 20923 26853 26873 27272 48195 503 273 json/fastjson/databind 63 1250 1208 1206 1247 2497 486 262 smile/jackson/databind 60 1697 2117 2290 2298 3996 338 241 smile/jackson/db-afterburner 60 1300 1614 1648 1703 3003 352 252 smile/protostuff-runtime 61 1275 1612 1638 1685 2961 335 235 bson/jackson/databind 63 5151 6729 6977 6918 12069 506 286 xml/xstreamc 62 6358 13208 13319 13516 19874 487 244 xml/jackson/databind-aalto 62 2955 5332 5465 5584 8539 683 286 Fastjson 使用示例

我们创建一个班级的对象,和一个学生对象如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywfjd.html