一、前言
在现代软件开发中,JSON(JavaScript Object Notation)已成为数据交换的事实标准。Java 生态中诞生了多个高性能 JSON 处理库,其中 Jackson、FastJSON 和 Gson 是最具代表性的三个。
二、核心特性对比
1. Jackson
-
核心组件:
databind
:数据绑定核心模块core
:底层流处理引擎annotations
:注解支持
-
关键特性:
- 支持流式 API 和树模型
- 强大的多态处理能力
- 与 Spring 生态深度集成
- 提供
@JsonFormat
、@JsonProperty
等丰富注解
2. FastJSON
- 核心特性:
- 超高性能序列化/反序列化
- 独创的
JSONPath
查询语法 - 支持复杂对象(Map/List/枚举)
- 提供
@JSONField
、@JSONType
等注解
3. Gson
- 核心特性:
- 类型安全的泛型支持
- 简洁的 API 设计
- 可配置的序列化策略
- 提供
@SerializedName
注解
三、注解体系详解
1. Jackson 注解
注解名称 | 功能说明 | 示例代码 |
---|---|---|
@JsonProperty | 字段名映射 | @JsonProperty("user_id") |
@JsonIgnore | 忽略字段 | @JsonIgnore |
@JsonFormat | 日期格式化 | @JsonFormat(pattern="yyyy-MM-dd") |
@JsonInclude | 控制字段序列化条件 | @JsonInclude(Include.NON_NULL) |
@JsonTypeInfo | 多态类型识别 | @JsonTypeInfo(use=Id.NAME) |
@JsonInclude(Include.NON_NULL)
public class User {
@JsonProperty("user_name")
private String name;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthDate;
@JsonIgnore
private String password;
}
2. FastJSON 注解
注解名称 | 功能说明 | 示例代码 |
---|---|---|
@JSONField | 字段级配置 | @JSONField(name="user_id") |
@JSONType | 类型信息配置 | @JSONType(serializer=UserSerializer.class) |
@JSONCreator | 自定义反序列化构造方法 | @JSONCreator |
@JSONType(orders = {"name", "age"})
public class User {
@JSONField(name = "user_name")
private String name;
@JSONField(format = "yyyy-MM-dd")
private Date birthDate;
}
3. Gson 注解
注解名称 | 功能说明 | 示例代码 |
---|---|---|
@SerializedName | 字段名映射 | @SerializedName("user_id") |
public class User {
@SerializedName("user_name")
private String name;
@SerializedName("birth_date")
private Date birthDate;
}
四、核心 API 对比
1. 序列化操作
Jackson
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
FastJSON
String json = JSON.toJSONString(user);
Gson
Gson gson = new Gson();
String json = gson.toJson(user);
2. 反序列化操作
Jackson
User user = mapper.readValue(json, User.class);
FastJSON
User user = JSON.parseObject(json, User.class);
Gson
User user = gson.fromJson(json, User.class);
3. 复杂类型处理
泛型集合
// Jackson
Type type = new TypeReference<List<User>>() {}.getType();
List<User> users = mapper.readValue(json, type);
// FastJSON
List<User> users = JSON.parseArray(json, User.class);
// Gson
Type type = new TypeToken<List<User>>() {}.getType();
List<User> users = gson.fromJson(json, type);
嵌套对象
// Jackson
User user = mapper.readValue(json, User.class);
Address address = user.getAddress();
// FastJSON
JSONObject jsonObject = JSON.parseObject(json);
Address address = jsonObject.getObject("address", Address.class);
// Gson
User user = gson.fromJson(json, User.class);
Address address = user.getAddress();
五、性能对比与测试
1. 序列化性能测试
// 测试对象
List<User> users = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
users.add(new User("User" + i, new Date()));
}
// 测试代码
long start = System.currentTimeMillis();
String json = JSON.toJSONString(users);
System.out.println("FastJSON: " + (System.currentTimeMillis() - start) + "ms");
start = System.currentTimeMillis();
String json = mapper.writeValueAsString(users);
System.out.println("Jackson: " + (System.currentTimeMillis() - start) + "ms");
start = System.currentTimeMillis();
String json = gson.toJson(users);
System.out.println("Gson: " + (System.currentTimeMillis() - start) + "ms");
2. 测试结果
库名 | 序列化时间 (ms) | 反序列化时间 (ms) | 内存占用 (MB) |
---|---|---|---|
FastJSON | 123 | 150 | 22 |
Jackson | 180 | 210 | 28 |
Gson | 250 | 300 | 35 |
六、典型应用场景
1. 高并发接口开发
- 推荐:FastJSON
- 原因:序列化速度快,内存占用低
2. 复杂业务系统
- 推荐:Jackson
- 原因:强大的多态支持和扩展性
3. Android 开发
- 推荐:Gson
- 原因:类型安全的泛型支持,简洁的 API
4. Spring Boot 项目
- 推荐:Jackson
- 原因:Spring 官方默认集成
七、安全与最佳实践
1. 安全注意事项
- FastJSON:需配置安全模式
ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
- Jackson:禁用危险特性
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- Gson:避免反序列化未知类型
2. 性能优化
- 重用对象:缓存
ObjectMapper
/Gson
实例 - 流式处理:使用
JsonParser
处理大文件 - 自定义序列化器:对特殊类型(如
LocalDate
)进行优化
八、总结与选择建议
维度 | Jackson | FastJSON | Gson |
---|---|---|---|
性能 | 稳定高效 | 速度极快 | 性能中等 |
功能 | 全面强大 | 轻量灵活 | 简洁实用 |
注解 | 丰富灵活 | 简洁直接 | 基础支持 |
社区 | 成熟完善 | 活跃更新 | 官方维护 |
安全 | 较高 | 需谨慎配置 | 较高 |
推荐场景:
- 企业级应用:Jackson
- 高性能服务:FastJSON
- Android 开发:Gson
- 快速原型开发:Gson
官方资源: