我将为你详细介绍几种主流的方法,从最简单到最灵活,并提供完整的代码示例。

(图片来源网络,侵删)
核心步骤
无论使用哪种库,基本步骤都是相似的:
- 添加依赖:在你的项目中引入处理 JSON 的库。
- 创建 Java 类(POJO/DTO):创建一个与 JSON 结构相匹配的 Java 类。
- 调用库的解析方法:使用库的 API 将 JSON 字符串解析为你创建的 Java 对象。
使用 Jackson (最流行、最强大)
Jackson 是目前 Java 生态中最流行、功能最全面的 JSON 处理库,Spring Boot 等主流框架都默认使用它。
添加依赖 (Maven)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 使用最新的稳定版本 -->
</dependency>
创建 Java 类 (POJO)
假设我们有如下的 JSON 字符串:
{
"name": "张三",
"age": 30,
"isStudent": false,
"courses": [
"Java",
"Spring Boot"
],
"address": {
"city": "北京",
"street": "中关村大街1号"
}
}
我们需要创建对应的 Java 类来映射这个结构。

(图片来源网络,侵删)
// Address.java
public class Address {
private String city;
private String street;
// 必须有无参构造器
public Address() {}
// Getters and Setters (Lombok 可以简化这个过程)
public String getCity() { return city; }
public void setCity(String city) { this.city = city; }
public String getStreet() { return street; }
public void setStreet(String street) { this.street = street; }
@Override
public String toString() {
return "Address{" + "city='" + city + '\'' + ", street='" + street + '\'' + '}';
}
}
// User.java
import java.util.List;
public class User {
private String name;
private int age;
private boolean isStudent;
private List<String> courses;
private Address address;
// 必须有无参构造器
public User() {}
// Getters and Setters
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; }
public List<String> getCourses() { return courses; }
public void setCourses(List<String> courses) { this.courses = courses; }
public Address getAddress() { return address; }
public void setAddress(Address address) { this.address = address; }
@Override
public String toString() {
return "User{" + "name='" + name + '\'' + ", age=" + age + ", isStudent=" + isStudent +
", courses=" + courses + ", address=" + address + '}';
}
}
注意:
- 类的属性名需要与 JSON 的 key 对应,如果不同,可以使用
@JsonProperty注解,@JsonProperty("user_name") private String name;。 - JSON 中的
true/false会自动映射到boolean类型。 - JSON 数组
[...]会映射到List或数组。 - JSON 对象 会映射到另一个自定义的 Java 对象。
进行转换
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) {
String jsonString = """
{
"name": "张三",
"age": 30,
"isStudent": false,
"courses": [
"Java",
"Spring Boot"
],
"address": {
"city": "北京",
"street": "中关村大街1号"
}
}
""";
// 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 将 JSON 字符串转换为 User 对象
User user = objectMapper.readValue(jsonString, User.class);
// 打印结果
System.out.println("转换成功!");
System.out.println(user);
System.out.println("用户姓名: " + user.getName());
System.out.println("所在城市: " + user.getAddress().getCity());
} catch (JsonProcessingException e) {
System.err.println("JSON 解析失败: " + e.getMessage());
e.printStackTrace();
}
}
}
使用 Gson (Google 出品,简单易用)
Gson 是 Google 开发的另一个非常流行的 JSON 库,以其简洁的 API 而闻名。
添加依赖 (Maven)
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 使用最新的稳定版本 -->
</dependency>
创建 Java 类
完全相同,你需要创建与 JSON 结构匹配的 User 和 Address 类(包含无参构造器和 Getter/Setter)。
进行转换
import com.google.gson.Gson;
public class GsonExample {
public static void main(String[] args) {
String jsonString = """
{
"name": "李四",
"age": 25,
"isStudent": true,
"courses": [
"Python",
"Machine Learning"
],
"address": {
"city": "上海",
"street": "浦东新区张江路"
}
}
""";
// 创建 Gson 实例
Gson gson = new Gson();
try {
// 将 JSON 字符串转换为 User 对象
User user = gson.fromJson(jsonString, User.class);
// 打印结果
System.out.println("转换成功!");
System.out.println(user);
System.out.println("用户姓名: " + user.getName());
System.out.println("所在城市: " + user.getAddress().getCity());
} catch (Exception e) {
System.err.println("JSON 解析失败: " + e.getMessage());
e.printStackTrace();
}
}
}
可以看到,Gson 的 API 非常简洁,new Gson() 即可完成初始化。
使用 org.json (轻量级)
这是一个非常轻量级的库,不需要定义完整的 Java 类,可以直接操作 JSON 数据,适合处理结构简单或动态的 JSON。
添加依赖 (Maven)
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20251013</version> <!-- 使用最新的稳定版本 -->
</dependency>
进行转换
这种方法不需要预先创建 User 和 Address 类。
import org.json.JSONObject;
import org.json.JSONArray;
public class OrgJsonExample {
public static void main(String[] args) {
String jsonString = """
{
"name": "王五",
"age": 28,
"isStudent": false,
"courses": [
"C++",
"Data Structure"
],
"address": {
"city": "深圳",
"street": "南山区科技园"
}
}
""";
try {
// 将整个 JSON 字符串解析为 JSONObject
JSONObject jsonObject = new JSONObject(jsonString);
// 直接从 JSONObject 中获取数据
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean isStudent = jsonObject.getBoolean("isStudent");
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
// 获取内部的 JSON 对象
JSONObject addressJson = jsonObject.getJSONObject("address");
String city = addressJson.getString("city");
System.out.println("城市: " + city);
// 获取内部的 JSON 数组
JSONArray coursesJson = jsonObject.getJSONArray("courses");
System.out.print("课程: ");
for (int i = 0; i < coursesJson.length(); i++) {
System.out.print(coursesJson.getString(i) + " ");
}
System.out.println();
} catch (Exception e) {
System.err.println("JSON 解析失败: " + e.getMessage());
e.printStackTrace();
}
}
}
总结与对比
| 特性 | Jackson | Gson | org.json |
|---|---|---|---|
| 流行度 | 极高 (Spring Boot 默认) | 高 (Google 官方) | 一般 (轻量级) |
| 易用性 | 中等 (功能强大,配置稍多) | 非常简单 | 简单 (直接操作) |
| 灵活性 | 极高 (注解丰富,复杂场景处理能力强) | 高 | 较低 (适合简单结构) |
| 性能 | 非常快 | 快 | 较快 |
| 是否需要POJO | 是 (推荐) | 是 (推荐) | 否 (直接操作) |
| 主要场景 | 企业级应用,复杂对象映射,需要高性能 | 快速开发,简单场景,Android 开发 | 处理简单、动态的 JSON,无需定义类 |
如何选择?
- 如果你在使用 Spring Boot 或开发大型企业应用:直接选择 Jackson,它是事实上的标准,与生态系统集成得最好,功能最全面。
- 如果你只是需要一个简单、快速的 JSON 库,或者不希望引入太多复杂的配置:选择 Gson,它的 API 非常直观,上手快。
- 如果你的 JSON 结构非常简单,或者你只是想快速解析一个 JSON 来获取某个值,不想定义一堆 Java 类:选择 org.json,它非常轻量,适合“一次性”的解析任务。
对于绝大多数现代 Java 项目,Jackson 是首选。
