处理 JSON 主要涉及两个方面:

- 将 Java 对象(Object)转换为 JSON 字符串(序列化, Serialization)。
- 将 JSON 字符串解析为 Java 对象(反序列化, Deserialization)。
在 Java 生态中,有多个流行的库可以完成这项工作,其中最主流和推荐的是 Jackson、Gson 和 org.json。
下面我将分别介绍这三个库的使用方法,并给出完整的代码示例。
Jackson (推荐)
Jackson 是目前 Java 生态中最流行、功能最强大的 JSON 处理库,它被广泛用于 Spring Boot 等主流框架中。
Maven 依赖
在你的 pom.xml 文件中添加 Jackson 的依赖:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 建议使用最新版本 -->
</dependency>
核心类
ObjectMapper: Jackson 的核心类,负责所有的 JSON 序列化和反序列化操作。@JsonProperty: 用于注解 Java 字段,指定其在 JSON 中的键名。@JsonIgnore: 用于注解 Java 字段,表示该字段在序列化和反序列化时被忽略。
示例代码
我们创建一个 User 类作为示例。
User.java
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private int id;
private String name;
// 使用 @JsonProperty 注解,指定 JSON 中的 key 为 "user_name"
@JsonProperty("user_name")
private String username;
private boolean isActive;
// 无参构造函数是反序列化时通常需要的
public User() {
}
public User(int id, String name, String username, boolean isActive) {
this.id = id;
this.name = name;
this.username = username;
this.isActive = isActive;
}
// Getters and Setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public boolean getActive() { return isActive; }
public void setActive(boolean active) { isActive = active; }
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", username='" + username + '\'' +
", isActive=" + isActive +
'}';
}
}
Main.java (Jackson 示例)
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) {
// 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
// --- 1. 将 Java 对象转换为 JSON 字符串 (序列化) ---
User user = new User(1, "张三", "zhangsan", true);
try {
// writeValueAsString() 方法将对象转为 JSON 字符串
String jsonString = objectMapper.writeValueAsString(user);
System.out.println("Java 对象 -> JSON 字符串:");
System.out.println(jsonString);
// 输出: {"id":1,"name":"张三","user_name":"zhangsan","isActive":true}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
System.out.println("\n----------------------------------------\n");
// --- 2. 将 JSON 字符串解析为 Java 对象 (反序列化) ---
String jsonString = "{\"id\":2,\"name\":\"李四\",\"user_name\":\"lisi\",\"isActive\":false}";
try {
// readValue() 方法将 JSON 字符串转为指定类型的 Java 对象
User userFromJson = objectMapper.readValue(jsonString, User.class);
System.out.println("JSON 字符串 -> Java 对象:");
System.out.println(userFromJson);
// 输出: User{id=2, name='李四', username='lisi', isActive=false}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
Google Gson
Gson 是 Google 开发的另一个非常流行的 JSON 库,以其简洁易用而闻名。

Maven 依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 建议使用最新版本 -->
</dependency>
核心类
Gson: Gson 的核心类,提供了toJson()和fromJson()等主要方法。
示例代码
User.java (与上面相同,但注解需要换成 Gson 的)
import com.google.gson.annotations.SerializedName; // Gson 的注解
public class User {
private int id;
private String name;
// 使用 @SerializedName 注解,指定 JSON 中的 key 为 "user_name"
@SerializedName("user_name")
private String username;
private boolean isActive;
public User() {
}
public User(int id, String name, String username, boolean isActive) {
this.id = id;
this.name = name;
this.username = username;
this.isActive = isActive;
}
// Getters and Setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public boolean getActive() { return isActive; }
public void setActive(boolean active) { isActive = active; }
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", username='" + username + '\'' +
", isActive=" + isActive +
'}';
}
}
Main.java (Gson 示例)
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
// 创建 Gson 实例
Gson gson = new Gson();
// --- 1. 将 Java 对象转换为 JSON 字符串 (序列化) ---
User user = new User(1, "张三", "zhangsan", true);
// toJson() 方法将对象转为 JSON 字符串
String jsonString = gson.toJson(user);
System.out.println("Java 对象 -> JSON 字符串:");
System.out.println(jsonString);
// 输出: {"id":1,"name":"张三","user_name":"zhangsan","isActive":true}
System.out.println("\n----------------------------------------\n");
// --- 2. 将 JSON 字符串解析为 Java 对象 (反序列化) ---
String jsonStringToParse = "{\"id\":2,\"name\":\"李四\",\"user_name\":\"lisi\",\"isActive\":false}";
// fromJson() 方法将 JSON 字符串转为指定类型的 Java 对象
User userFromJson = gson.fromJson(jsonStringToParse, User.class);
System.out.println("JSON 字符串 -> Java 对象:");
System.out.println(userFromJson);
// 输出: User{id=2, name='李四', username='lisi', isActive=false}
}
}
org.json
这是一个轻量级的库,API 设计上更接近 JavaScript 的 JSON 对象,非常直观。
Maven 依赖
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20251013</version> <!-- 建议使用最新版本 -->
</dependency>
核心类
JSONObject: 表示一个 JSON 对象(键值对集合)。JSONArray: 表示一个 JSON 数组。JSONException: JSON 处理时可能抛出的异常。
示例代码
注意: org.json 库不要求你预先定义一个 Java User 类,它更灵活,可以直接操作 JSON 数据,但如果想转换成自定义对象,需要一些额外步骤。
Main.java (org.json 示例)
import org.json.JSONObject;
public class Main {
public static void main(String[] args) {
// --- 1. 从 Java 对象创建 JSON 字符串 ---
// 直接构建 JSONObject
User user = new User(1, "张三", "zhangsan", true);
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", user.getId());
jsonObject.put("name", user.getName());
jsonObject.put("user_name", user.getUsername());
jsonObject.put("isActive", user.isActive());
String jsonString = jsonObject.toString();
System.out.println("Java 对象 -> JSON 字符串:");
System.out.println(jsonString);
// 输出: {"id":1,"name":"张三","user_name":"zhangsan","isActive":true}
System.out.println("\n----------------------------------------\n");
// --- 2. 解析 JSON 字符串 ---
String jsonStringToParse = "{\"id\":2,\"name\":\"李四\",\"user_name\":\"lisi\",\"isActive\":false}";
JSONObject parsedJsonObject = new JSONObject(jsonStringToParse);
// 从 JSONObject 中获取数据,可以手动构造成 Java 对象
int id = parsedJsonObject.getInt("id");
String name = parsedJsonObject.getString("name");
String username = parsedJsonObject.getString("user_name");
boolean isActive = parsedJsonObject.getBoolean("isActive");
User userFromJson = new User(id, name, username, isActive);
System.out.println("JSON 字符串 -> Java 对象:");
System.out.println(userFromJson);
// 输出: User{id=2, name='李四', username='lisi', isActive=false}
}
}
手动转换的缺点: 使用 org.json 时,从 JSON 到 Java 对象的转换是手动的,如果字段很多,会非常繁琐,它更适合那些只需要处理 JSON 数据结构,而不需要严格映射到特定 Java 类型的场景。
总结与对比
| 特性 | Jackson | Gson | org.json |
|---|---|---|---|
| 流行度 | 非常高 (Spring Boot 默认) | 非常高 (Google出品) | 一般 |
| 易用性 | 简单,但需要 ObjectMapper 实例 |
非常简单,API直观 | 简单,API类似JS |
| 性能 | 非常快,内存效率高 | 快,性能也很好 | 较快 |
| 功能 | 最强大,支持流式API、数据绑定、树模型等 | 功能强大,支持数据绑定等 | 功能相对基础,专注于JSON结构操作 |
| 与Java对象绑定 | 是,核心功能 | 是,核心功能 | 否,需要手动转换 |
| 依赖 | jackson-databind |
gson |
json |
| 推荐场景 | 企业级应用、大型项目、Spring Boot,功能全面,性能卓越。 | 通用场景、中小型项目,API简洁,易于上手。 | 轻量级需求、快速脚本、只需要操作JSON结构。 |
- 如果你正在开发一个新的项目,尤其是企业级应用或使用 Spring Boot,强烈推荐使用 Jackson。 它是事实上的标准。
- 如果你需要一个简单、快速、可靠的库,并且不介意 Google 的背景,Gson 是一个绝佳的选择。
- 如果你的需求非常简单,只是偶尔需要解析或生成一小段 JSON,或者你更喜欢 JavaScript 风格的 API,
org.json值得一试。 但对于复杂的数据映射,它会变得很麻烦。
