核心概念
我们需要明确两个概念:

-
JSON 字符串 (JSON String): 指的是用引号括起来的、符合 JSON 格式的文本。
'{"name":"张三", "age":30, "isStudent":false}',在 Java 中,它通常是一个String类型的变量。 -
JSON 对象 (JSON Object):
- 广义上:指代任何符合 JSON 结构的数据,可以是对象()、数组(
[...])、字符串、数字等。 - 在 Java 中:
- 可以指
org.json库中的JSONObject和JSONArray(比较老旧,不推荐在新项目中使用)。 - 更常见的是指通过 Jackson 或 Gson 将 JSON 字符串反序列化后得到的 Java 对象,一个
User类的实例,这是最推荐的方式,因为它能提供类型安全和代码提示。
- 可以指
- 广义上:指代任何符合 JSON 结构的数据,可以是对象()、数组(
使用 Jackson (最推荐)
Jackson 是目前 Java 生态中最流行、功能最强大的 JSON 处理库,Spring Boot 等主流框架都默认集成了它。
添加依赖
如果你使用 Maven,在 pom.xml 中添加依赖:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 使用最新稳定版本 -->
</dependency>
如果你使用 Gradle,在 build.gradle 中添加:
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' // 使用最新稳定版本
准备一个 Java 类(POJO)
为了将 JSON 字符串转换成有类型的 Java 对象,你需要一个与之对应的 Java 类(通常称为 POJO - Plain Old Java Object)。
// User.java
public class User {
private String name;
private int age;
private boolean isStudent;
// 必须有无参构造函数,Jackson 在反序列化时会用到
public User() {
}
// 推荐:提供 getter 和 setter 方法
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 boolean isStudent() {
return isStudent;
}
public void setStudent(boolean student) {
isStudent = student;
}
// 可选:重写 toString() 方便打印和调试
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", isStudent=" + isStudent +
'}';
}
}
核心转换代码
Jackson 提供了 ObjectMapper 类,它是所有操作的入口。
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. 定义你的 JSON 字符串
String jsonString = "{\"name\":\"李四\", \"age\":25, \"isStudent\":true}";
try {
// 3. 调用 objectMapper.readValue() 方法进行转换
// 第一个参数是 JSON 字符串
// 第二个参数是你要转换成的 Java 对象的 .class 文件
User user = objectMapper.readValue(jsonString, User.class);
// 4. 现在你可以像使用普通 Java 对象一样使用 user
System.out.println("转换成功!");
System.out.println(user.getName()); // 输出: 李四
System.out.println(user.getAge()); // 输出: 25
System.out.println(user.isStudent()); // 输出: true
System.out.println(user); // 调用 toString() 方法
} catch (JsonProcessingException e) {
System.err.println("JSON 解析失败!");
e.printStackTrace();
}
}
}
使用 Gson
Google 的 Gson 是另一个非常流行且易用的 JSON 库。

添加依赖
Maven (pom.xml):
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 使用最新稳定版本 -->
</dependency>
Gradle (build.gradle):
implementation 'com.google.code.gson:gson:2.10.1' // 使用最新稳定版本
准备 Java 类 (POJO)
和 Jackson 一样,你需要一个对应的 Java 类。User.java 的代码完全相同。
核心转换代码
Gson 的使用也非常直观,通过 Gson 类的 fromJson() 方法实现。
import com.google.gson.Gson;
public class GsonExample {
public static void main(String[] args) {
// 1. 创建 Gson 实例(同样建议全局单例)
Gson gson = new Gson();
// 2. 定义你的 JSON 字符串
String jsonString = "{\"name\":\"王五\", \"age\":28, \"isStudent\":false}";
try {
// 3. 调用 gson.fromJson() 方法进行转换
// 第一个参数是 JSON 字符串
// 第二个参数是你要转换成的 Java 对象的 .class 文件
User user = gson.fromJson(jsonString, User.class);
// 4. 使用转换后的 Java 对象
System.out.println("转换成功!");
System.out.println(user.getName()); // 输出: 王五
System.out.println(user.getAge()); // 输出: 28
System.out.println(user.isStudent()); // 输出: false
System.out.println(user);
} catch (Exception e) {
System.err.println("JSON 解析失败!");
e.printStackTrace();
}
}
}
使用 org.json (不推荐,仅作了解)
这是一个比较基础的 JSON 库,但它的设计不够“面向对象”,它转换出的不是你自定义的 Java 类,而是 JSONObject 和 JSONArray 这样的通用对象,你需要手动从中取值。
添加依赖
Maven (pom.xml):
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20251013</version> <!-- 使用最新稳定版本 -->
</dependency>
核心转换代码
import org.json.JSONObject;
public class OrgJsonExample {
public static void main(String[] args) {
// 1. 定义你的 JSON 字符串
String jsonString = "{\"name\":\"赵六\", \"age\":35, \"isStudent\":false}";
try {
// 2. 直接使用 JSONObject 的构造函数将字符串转换为对象
JSONObject jsonObject = new JSONObject(jsonString);
// 3. 通过 getXXX() 方法从 jsonObject 中获取数据
// 注意:get 的参数是 JSON 中的 key,返回值是 Object,需要手动类型转换
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean isStudent = jsonObject.getBoolean("isStudent");
System.out.println("转换成功!");
System.out.println(name); // 输出: 赵六
System.out.println(age); // 输出: 35
System.out.println(isStudent); // 输出: false
// 这种方式无法直接得到一个 User 对象,只能得到一个通用的 JSONObject
System.out.println(jsonObject); // 输出: {"name":"赵六","age":35,"isStudent":false}
} catch (Exception e) {
System.err.println("JSON 解析失败!");
e.printStackTrace();
}
}
}
总结与对比
| 特性 | Jackson | Gson | org.json |
|---|---|---|---|
| 流行度 | 非常高 (Spring Boot 默认) | 非常高 (Google出品) | 一般,较老旧 |
| 易用性 | 非常简单,ObjectMapper 是核心 |
非常简单,Gson 是核心 |
简单,但不够面向对象 |
| 性能 | 性能优异,功能强大 | 性能良好,功能齐全 | 性能一般 |
| 核心优势 | 功能全面,数据绑定强大,支持流式处理等 | API简洁,易于上手 | 轻量级,依赖小 |
| 推荐场景 | 所有新项目,尤其是 Spring 生态项目 | 任何需要处理 JSON 的 Java 项目 | 快速处理简单 JSON,不涉及复杂对象映射 |
| 转换结果 | 类型安全的自定义 Java 对象 (POJO) | 类型安全的自定义 Java 对象 (POJO) | 通用的 JSONObject / JSONArray |
最终建议
对于任何新的 Java 项目,强烈推荐使用 Jackson,它是行业标准,功能、性能和社区支持都处于领先地位,如果你只是需要一个非常轻量级的工具且不介意手动取值,org.json 也可以考虑,但 Gson 通常是比它更好的选择。
