Fastjson2 和 Fastjson1 对比
如果你刚接触JSON解析,或者项目里还在用老版本的Fastjson,这篇文章可以帮你了解两者有什么不同,以及怎么从Fastjson1升级到Fastjson2。
一、为什么要有Fastjson2?
Fastjson1曾是国内最流行的JSON库之一,以其极快的解析速度闻名。但随着时间推移,其设计上的一些缺陷逐渐暴露,尤其是安全问题(比如反序列化漏洞)和架构扩展性不足。Fastjson2作为完全重写的版本,不仅修复了这些问题,还带来了更好的性能和更现代的设计。
你可能关心的核心变化:
- 安全性:默认关闭了autoType,不再默认支持反序列化任意类
- 速度:通过优化JSONB格式,解析速度提升20%~50%
- API:统一了JSONB和JSON的API,支持JDK 8+的新特性
二、代码对比
1. 基础序列化/反序列化
Fastjson1 写法:
// 序列化
String json = JSON.toJSONString(user);
// 反序列化
User user = JSON.parseObject(json, User.class);
Fastjson2 写法:
// 序列化(核心API不变,但内部优化)
String json = JSON.toJSONString(user);
// 反序列化(支持泛型推断)
User user = JSON.parseObject(json, User.class);
看起来几乎一样?没错,Fastjson2保持了高度兼容性。但注意:
- Fastjson2默认关闭了
autoType - 如果反序列化需要自定义类型,必须显式指定
2. 处理泛型集合
Fastjson1:
List<User> list = JSON.parseArray(json, User.class);
Fastjson2(更简洁):
List<User> list = JSON.parseObject(json, new TypeReference<List<User>>(){}.getType());
// 或者使用新的静态方法
List<User> list = JSON.parseArray(json, User.class); // 依然兼容
3. 性能差异演示
下面是一个简单的压测对比(单线程,重复1万次):
// Fastjson1
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
String json = JSON.toJSONString(user);
User parsed = JSON.parseObject(json, User.class);
}
System.out.println("Fastjson1: " + (System.currentTimeMillis() - start) + "ms");
// Fastjson2
start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
String json = JSON.toJSONString(user);
User parsed = JSON.parseObject(json, User.class);
}
System.out.println("Fastjson2: " + (System.currentTimeMillis() - start) + "ms");
实测结果(仅供参考,依赖环境):
- Fastjson1: 约450ms
- Fastjson2: 约320ms
提升约30%
4. JSONB格式支持
Fastjson2引入了二进制JSON格式JSONB,它是Fastjson2独有的,适合高性能场景:
// 序列化为JSONB
byte[] jsonbBytes = JSONB.toBytes(user);
// 反序列化
User user = JSONB.parseObject(jsonbBytes, User.class);
对于RPC或缓存场景,直接使用二进制格式能减少序列化开销。
三、迁移注意事项
- 配置变化:
JSON.DEFAULT_PARSER_FEATURE等配置类被移除,改用JSONReader.Feature - 安全配置:如果需要支持autoType,必须显式开启:
JSON.config(JSONReader.Feature.SupportAutoType); - 依赖冲突:如果项目同时存在fastjson1和fastjson2的Maven依赖,注意排除旧版。
四、什么时候该升级?
- 新项目:直接使用Fastjson2,享受更好的安全性和性能
- 老项目:如果遇到安全问题或性能瓶颈,建议逐步替换
- 依赖情况:如果项目依赖的其他库使用了Fastjson1,优先升级那些库再替换
结语
Fastjson2不是简单的版本升级,而是一次彻底的架构革新。对于初学者,建议直接学习Fastjson2,因为它更安全、更快,且API保持简洁。如果你还在使用Fastjson1,不妨花一天时间完成迁移,性价比很高。

