Java 中处理 JSON:Gson vs Jackson vs Fastjson 对比
Java 生态中有三大主流 JSON 库:Gson、Jackson 和 Fastjson。本文从多个维度对比它们的差异,帮你选择最适合的库。
三大 JSON 库简介
Gson(Google)
Google 开发的 JSON 库,以简洁易用著称。
Gson gson = new Gson();
String json = gson.toJson(user);
User user = gson.fromJson(json, User.class);
Jackson(Spring Boot 默认)
功能最强大的 JSON 库,Spring Boot 默认集成。
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
User user = mapper.readValue(json, User.class);
Fastjson(阿里巴巴)
阿里巴巴开发的高性能 JSON 库,国内使用广泛。
String json = JSON.toJSONString(user);
User user = JSON.parseObject(json, User.class);
性能对比
对 10 万条数据的序列化/反序列化测试:
操作
Gson
Jackson
Fastjson
序列化
450ms
280ms
220ms
反序列化
520ms
310ms
260ms
内存占用
中
低
低
结论:Fastjson 最快,Jackson 次之,Gson 最慢。
功能对比
功能
Gson
Jackson
Fastjson
注解支持
✅
✅
✅
自定义序列化
✅
✅
✅
流式 API
❌
✅
✅
JSON Schema
❌
✅
❌
树模型
✅
✅
✅
日期处理
手动
自动
自动
null 处理
可配置
可配置
可配置
安全性对比
Fastjson 安全问题
Fastjson 1.x 存在多个远程代码执行漏洞(CVE),需要:
升级到 Fastjson 2.x
开启 SafeMode
限制反序列化白名单
Jackson 安全问题
Jackson 相对安全,但需要注意:
禁用 enableDefaultTyping()(防止反序列化漏洞)
使用白名单限制反序列化类型
Gson 安全性
Gson 设计简单,没有已知的严重安全漏洞。
选择建议
推荐 Jackson 的场景
Spring Boot 项目(默认集成)
需要复杂 JSON 处理
对安全性要求高
企业级项目
推荐 Gson 的场景
简单的 JSON 处理
Android 开发
追求代码简洁
小型项目
推荐 Fastjson 的场景
对性能要求极高
国内项目(文档多)
已有项目使用(升级到 2.x)
最佳实践
// 1. 使用注解控制序列化
public class User {
@JsonProperty("user_name")
private String userName;
@JsonIgnore
private String password;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
}
// 2. 全局配置
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 3. 异常处理
try {
User user = mapper.readValue(json, User.class);
} catch (JsonProcessingException e) {
// 处理解析异常
}
总结
对于新项目,推荐使用 Jackson:功能强大、安全可靠、Spring Boot 默认集成。如果是简单场景,Gson 也是不错的选择。Fastjson 2.x 已经修复了安全问题,性能优秀,但生态影响力已不如前。
虚拟现实工程师:报考步骤是?适合哪些人员?就业方向在哪?悦动这款车的安全配置究竟怎么样