Fastjson2相对Fastjson1版本可以说是一次完全的重构,这里从代码的角度,分析两者的一些区别,并总结一些新的,让小伙伴们使用Fastjson2或者进行功能扩展的时候,能更加顺畅。除了在性能方面的提升之外,Fastjson 2还解决了一系列安全方面的问题和兼容性的问题,这很大的提高了使用的便捷性。
FASTJSON v2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。
通过同一套API,支持JSON/JSONB两种协议;JSONPath 是一等公民;支持全量解析和部分解析;支持Java服务端;客户端Android;大数据场景;支持Kotlin支持JSON Schema ;支持Android;支持Graal Native-Image。
添加依赖
<dependency>
<groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId>
<version>2.0.27</version>
</dependency>
注意其groupId和v1版本的也有所改变。
整体继承类的修改
版本V1
//1.Fastjson 1 JSONObject类定义
public class JSONObject extends JSON implements Map<String,Object> ...{
}
//2.Fastjson 1 JSONArray类定义
public class JSONArray extends JSON implements List<Object>... {
}
版本V2
//1.Fastjson2 JSONObject类定义
public class JSONObject extends LinkedHashMap<String, Object> implements InvocationHandler{
}
//2.Fastjson2 JSONArray类定义
public class JSONArray extends ArrayList<Object> {
}
Fastjson2 的JSONObject 实现了链结构的Map,是有序的Map容器。无论是JSONObject或者JSONArray都摆脱了JSON的类,使JSON由抽象类变成了接口。
时间转化类由原来使用SimpleDateFormat转化为 JDK8 提供的java.time API,吸收了 joda-time的部分精华,功能更强大,性能也更好。同时,DateTimeFormatter 是线程安全的。
将JSON解析为JSONObject
String text = "...";
JSONObject data = JSON.parseObject(text);
byte[] bytes = ...;
JSONObject data = JSON.parseObject(bytes);
将JSON解析为JSONArray
String text = "...";
JSONArray data = JSON.parseArray(text);
将JSON解析为Java对象
String text = "...";
User data = JSON.parseObject(text, User.class);
将Java对象序列化为JSON
Object data = "...";
String text = JSON.toJSONString(data);
byte[] text = JSON.toJSONBytes(data);
使用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);
以上基本上为Fastjson2的一些简单介绍和使用。如需详情的使用可以登录其官网查看。