主流 Java JSON 库对比
| 库名称 | 特点 | 易用性 | 性能 | 推荐场景 |
|---|---|---|---|---|
| Jackson | 功能最全、性能最好、社区最活跃,是事实上的行业标准。 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 首选推荐,几乎所有 Spring Boot 项目默认集成,适用于几乎所有场景。 |
| Gson | Google 出品,API 简洁,对复杂对象和泛型支持好。 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Android 开发首选,如果你需要一个极其简单、稳定的库,Gson 是很好的选择。 |
| Fastjson | 阿里巴巴开源,解析速度极快,在国内使用非常广泛。 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 对性能要求极高的场景,但需注意其历史版本存在安全漏洞,建议使用最新版 1.2.x 或 2.x。 |
| JSON-P / JSON-P | Java EE 标准(现 Jakarta EE),提供一种标准化的 API,不依赖具体实现。 | ⭐⭐ | ⭐⭐ | 当你的项目需要保持与 Java EE 标准的兼容性,不希望引入第三方特定库时。 |
Jackson (最推荐)
Jackson 是功能最强大、性能最好的 JSON 处理库,也是 Spring Boot 的默认选择。

核心概念
ObjectMapper: 核心类,负责所有 JSON 的读写操作。@JsonProperty: 用于指定 Java 对象属性与 JSON 字段的映射关系。@JsonIgnore: 用于忽略某个属性,不进行序列化。
Maven 依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 建议使用最新版本 -->
</dependency>
Gradle 依赖
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
代码示例
准备一个 Java 对象
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private String name;
private int age;
// 使用 @JsonProperty 指定 JSON 字段名
@JsonProperty("email_address")
private String email;
// 使用 @JsonIgnore 忽略该字段
@JsonIgnore
private String password;
// 构造器、Getter 和 Setter 是必须的
public User() {}
public User(String name, int age, String email, String password) {
this.name = name;
this.age = age;
this.email = email;
this.password = password;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
执行转换
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) {
// 1. 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
// 2. 创建一个 User 对象
User user = new User("张三", 30, "zhangsan@example.com", "123456");
try {
// 3. 将对象转换为 JSON 字符串
// 默认格式化,可读性差
String jsonString = objectMapper.writeValueAsString(user);
System.out.println("默认 JSON: " + jsonString);
// 4. 将对象格式化为美观的 JSON 字符串 (带缩进)
String prettyJsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
System.out.println("美化 JSON:\n" + prettyJsonString);
// 5. 将 JSON 字符串转换回对象 (反序列化)
User deserializedUser = objectMapper.readValue(jsonString, User.class);
System.out.println("反序列化后的对象: " + deserializedUser.getName());
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
输出结果:
默认 JSON: {"name":"张三","age":30,"email_address":"zhangsan@example.com"}
美化 JSON:
{
"name" : "张三",
"age" : 30,
"email_address" : "zhangsan@example.com"
}
Gson
Gson 由 Google 开发,以其简洁的 API 而闻名,尤其是在处理泛型时非常方便。

Maven 依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 建议使用最新版本 -->
</dependency>
Gradle 依赖
implementation 'com.google.code.gson:gson:2.10.1'
代码示例
准备 Java 对象
Gson 也支持注解,如 @SerializedName (对应 Jackson 的 @JsonProperty)。
import com.google.gson.annotations.SerializedName;
public class User {
private String name;
private int age;
@SerializedName("email_address")
private String email;
// 构造器、Getter 和 Setter
public User() {}
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// ... 省略 Getter 和 Setter
}
执行转换
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonExample {
public static void main(String[] args) {
// 1. 创建 Gson 实例
// 使用 GsonBuilder 可以配置,例如美化输出
Gson gson = new GsonBuilder().setPrettyPrinting().create();
// 2. 创建 User 对象
User user = new User("李四", 25, "lisi@example.com");
// 3. 将对象转换为 JSON 字符串
String jsonString = gson.toJson(user);
System.out.println("Gson JSON:\n" + jsonString);
// 4. 将 JSON 字符串转换回对象
User deserializedUser = gson.fromJson(jsonString, User.class);
System.out.println("反序列化后的对象: " + deserializedUser.getName());
}
}
Fastjson (阿里)
Fastjson 以其极致的解析速度著称,在国内很多大型互联网公司中被广泛使用。注意: 旧版本(如 1.2.x 之前)存在高危安全漏洞,请务必使用 2.83+ 或 x 版本。
Maven 依赖 (推荐使用 2.x 版本)
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.40</version> <!-- 建议使用最新 2.x 版本 -->
</dependency>
代码示例
Fastjson 的 API 非常直接。

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONWriter;
public class FastjsonExample {
public static void main(String[] args) {
// 1. 创建 User 对象
User user = new User("王五", 28, "wangwu@example.com");
// 2. 将对象转换为 JSON 字符串
// JSONWriter.Feature.PrettyFormat 用于美化输出
String jsonString = JSON.toJSONString(user, JSONWriter.Feature.PrettyFormat);
System.out.println("Fastjson JSON:\n" + jsonString);
// 3. 将 JSON 字符串转换回对象
User deserializedUser = JSON.parseObject(jsonString, User.class);
System.out.println("反序列化后的对象: " + deserializedUser.getName());
}
}
如何选择?
| 场景 | 推荐库 | 理由 |
|---|---|---|
| 新项目,尤其是 Spring Boot 项目 | Jackson | 无需额外配置,开箱即用,性能和功能都是顶级。 |
| Android 开发 | Gson | 早期被集成在 Android 框架中,API 简单,体积小。 |
| 对性能有极致要求,且能控制版本 | Fastjson (2.x) | 解析速度非常快,但需要关注其安全更新。 |
| 需要遵循 Java EE 标准 | JSON-P | 标准化,但 API 相对繁琐,不常用。 |
对于绝大多数 Java 后端开发,Jackson 是最安全、最不会出错的选择,如果你在做一个 Android 应用,或者偏爱 Google 的生态,Gson 是一个很好的备选,如果你在一家国内互联网公司,并且对性能有严苛要求,Fastjson 2.x 值得考虑。
