Fastjson是一个Java语言编写的高性能功能完善的JSON库。FastJson是阿里巴巴开源的Java对象和JSON格式字符串的快速转换的工具库,和google的Gson用法相似。
高性能
fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson。并且还超越了google的二进制协议protocol buf。
支持标准
Fastjson完全支持 http://json.org的标准,也是官方网站收录的参考实现之一。
功能强大
(1)支持各种JDK类型。包括基本类型、JavaBean、Collection、Map、Enum、泛型等。
(2)支持循环引用
无依赖
不需要例外额外的jar,能够直接跑在JDK上。
支持范围广
支持JDK 5、JDK 6、Android、阿里云手机等环境。
开源
(1)Apache License 2.0
(2)代码托管在github.org上,项目地址是 https://github.com/AlibabaTech/fastjson
测试充分
fastjson有超过1500个testcase,每次构建都会跑一遍,丰富的测试场景保证了功能稳定。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.31</version>
</dependency>
由于FastJson 1.0 存在安全漏洞,已经被禁止在项目中使用,因此官方即使推出了 2.0 版本
官网地址如下:
https://github.com/alibaba/fastjson2
FASTJSON 2是一个性能极致并且简单易用的Java JSON库。
在fastjson v2中,groupId和1.x不一样,是com.alibaba.fastjson2:
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.41</version>
</dependency>
如果原来使用fastjson 1.2.x版本,可以使用兼容包,兼容包不能保证100%兼容,请仔细测试验证,发现问题请及时反馈。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.41</version>
</dependency>
在fastjson v2中,package和1.x不一样,是com.alibaba.fastjson2。如果你之前用的是fastjson1,大多数情况直接更包名就即可。
(1)将JSON解析为JSONObject
String text = "...";
JSONObject data = JSON.parseObject(text);
byte[] bytes = ...;
JSONObject data = JSON.parseObject(bytes);
(2)将JSON解析为JSONArray
String text = "...";
JSONArray data = JSON.parseArray(text);
(3)将JSON解析为Java对象
String text = "...";
User data = JSON.parseObject(text, User.class);
(4)将Java对象序列化为JSON
Object data = "...";
String text = JSON.toJSONString(data);
byte[] text = JSON.toJSONBytes(data);
(5)使用JSONObject、JSONArray
String text = "{\"id\": 2,\"name\": \"fastjson2\"}";
JSONObject obj = JSON.parseObject(text);
int id = obj.getIntValue("id");
String name = obj.getString("name");
String text = "[2, \"fastjson2\"]";
JSONArray array = JSON.parseArray(text);
int id = array.getIntValue(0);
String name = array.getString(1);
JSONArray array = ...
JSONObject obj = ...
User user = array.getObject(0, User.class);
User user = obj.getObject("key", User.class);
JSONArray array = ...
JSONObject obj = ...
User user = obj.toJavaObject(User.class);
List<User> users = array.toJavaList(User.class);
class User {
public int id;
public String name;
}
User user = new User();
user.id = 2;
user.name = "FastJson2";
String text = JSON.toJSONString(user);
byte[] bytes = JSON.toJSONBytes(user);
序列化结果:
{
"id" : 2,
"name" : "FastJson2"
}
(1)使用JSONB
User user = ...;
byte[] bytes = JSONB.toBytes(user);
byte[] bytes = JSONB.toBytes(user, JSONWriter.Feature.BeanToArray);
(2)将JSONB数据解析为JavaBean
byte[] bytes = ...
User user = JSONB.parseObject(bytes, User.class);
User user = JSONB.parseObject(bytes, User.class, JSONReader.Feature.SupportBeanArrayMapping);
(1)使用JSONPath读取部分数据
String text = ...;
JSONPath path = JSONPath.of("$.id"); // 缓存起来重复使用能提升性能
JSONReader parser = JSONReader.of(text);
Object result = path.extract(parser);
(2)使用JSONPath读取部分byte[]的数据
byte[] bytes = ...;
JSONPath path = JSONPath.of("$.id"); // 缓存起来重复使用能提升性能
JSONReader parser = JSONReader.of(bytes);
Object result = path.extract(parser);
(3)使用JSONPath读取部分byte[]的数据
byte[] bytes = ...;
JSONPath path = JSONPath.of("$.id"); // 缓存起来重复使用能提升性能
JSONReader parser = JSONReader.ofJSONB(bytes); // 注意这里使用ofJSONB方法
Object result = path.extract(parser);