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

作者:JaJian`博кē

来源:

JSON,全名:JavaScript Object Notation,作为一种常见的轻量级数据交换格式,应该与程序员的开发事业保持联系。干净清晰的层次结构使JSON成为理想的数据交换语言。易于读写,也易于解析和生成机器,有效提高网络传输效率。

Java是一种面向对象的语言,所以我们更多的是在项目中以对象的形式处理业务,但我们必须将对象转换为JSON格式以便在传输时进行传输,而JSON格式通常可以解析为大多数。对象格式不关心编程语言。

850bf55caf1f41f4932914e390f62f48

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

86ad384eac884ad8b806ff091096f1b9

1.什么是Fastjson?

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

2,Fastjson的优点

速度快

Fastjson is faster than other JSON libraries. Since the release of 1.1.x in fastjson in 2011, its performance has never been surpassed by JSON libraries implemented by other Java.

Widely used

Fastjson is used on a large scale in Alibaba and deployed on tens of thousands of servers. Fastjson is widely accepted in the industry. In 2012, it was selected by Open Source China as one of the most popular domestic open source software.

Complete testing

Fastjson has a lot of testcases. In version 1.2.11, testcase exceeds 3,321. Regression testing is performed every release to ensure consistent quality.

Easy to use

Fastjson's API is very simple.

Full-featured

Support for generics, support for stream processing of large texts, support for enumeration, support for serialization and deserialization extensions.

3. How to get Fastjson

You can download fastjson:

by

Maven Central Warehouse:

Sourceforge.net:

Configure the fastjson dependency directly in the maven project's pom file. The latest version of fastjson will be posted to the maven central repository, which you can rely on directly.

Com.alibaba

Fastjson

X.x.x

Where x.x.x is the version number, use a specific version as needed, and it is recommended to use the latest version.

4. Fastjson's main API

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

50d217f037ce4dcb899d12ac65e06555

序列:

String jsonString=JSON.toJSONString(obj);

反序列化:

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

通用反序列化:

导入com.alibaba.fastjson.TypeReference;

List list=JSON.parseObject('.',new TypeReference(){});

5,Fastjson表现

Fastjson是Java语言中速度最快的json库,比最快的自称Jackson更快。第三方独立测试结果如下所示:

当您进行自己的性能测试时,需要关闭循环参考检测功能。

JSON.toJSONString(obj,SerializerFeature.DisableCircularReferenceDetect)

VO vo=JSON.parseObject('.',VO.class,Feature.DisableCircularReferenceDetect)

此外,Fastjson的速度比Gson快6倍,测试结果可以在这里看到:

7737ab5aed5540d3a33a7ebe63c04133

6,Fastjson使用实例

我们创建一个类对象,学生对象如下:

类对象

4ddb6ee150dc435fbcd8f59e99ff04dc

学生对象

c963dc0895c948d8be4ee1d3db1437f7

主要功能正在运行

3e482fa1f738449c98bb2b553969a7e4

最终结果如下:

JSON字符串:

{'id': 0,'name':'admin','users': [{'id': 2,'name':'varter'},{'id': 3,'name':'root' }]}

JavaBean对象:

成绩{id=0,name='admin',users=[Student {id=2,name='guest'},Student {id=3,name='root'}]}

7.在对象中输出空值

在fastjson中,默认情况下不输出空值。无论Map中的null和object属性中的null如何,序列化都将被忽略而不会输出,这将减少生成的文本的大小。但是如果你需要输出空值呢?

如果需要输出空值,则需要使用SerializerFeature.WriteMapNullValue

模型obj=.

JSON.toJSONString(obj,SerializerFeature.WriteMapNullValue);

null的几种特殊处理方法:

07065bb061de4fd7a7ec5857963c92d7

3fce1e3dad46448983881f4db2532e23

8,Fastjson处理日期

Fastjson用于处理日期的API很简单,例如:

JSON.toJSONStringWithDateFormat(日期,'yyyy-MM-dd HH: mm: ss.SSS')

使用ISO-8601日期格式

JSON.toJSONString(obj,SerializerFeature.UseISO8601DateFormat);

全局修改日期格式

JSON.DEFFAULT_DATE_FORMAT='yyyy-MM-dd';

JSON.toJSONString(obj,SerializerFeature.WriteDateUseDateFormat);

反序列化会自动识别以下日期格式:

ISO-8601日期格式yyyy-MM-ddyyyy-MM-dd HH: mm: ssyyyy-MM-dd HH: mm: ss.SSS毫秒数字毫秒数字串.NET JSON日期格式new Date(198293238)

尽管上面处理了单日期类型和全局日期类型格式的配置,但有时我们需要区分对象中的各个日期类型,而不必使用相同的格式。怎么处理呢?接下来,我们介绍Fastjson的自定义序列化。

9,Fastjson自定义序列化

9.1,简介

Fastjson支持多种自定义序列化的方法。

通过