这个过程的核心是使用一个JSON 库,目前最主流和推荐的库是 Jackson 和 Gson,下面我将详细介绍如何使用这两个库,并附上完整的代码示例。

核心概念
- JSON 字符串: 一个符合 JSON 规范的字符串,
{"name":"John", "age":30, "city":"New York"}。 - Java 对象: 一个普通的 Java 类(POJO - Plain Old Java Object)的实例,或者
java.util.Map、java.util.List等集合对象。 - 解析/反序列化: 将 JSON 字符串转换成 Java 对象的过程。
使用 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>
准备一个 Java 实体类
为了将 JSON 字符串映射到具体的对象,最好先创建一个与 JSON 结构对应的 Java 类。
// User.java
public class User {
private String name;
private int age;
private String city;
// 必须有无参构造函数,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 String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
// 可选:重写 toString() 方法,方便打印和调试
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", city='" + city + '\'' +
'}';
}
}
执行转换
使用 ObjectMapper 类来完成转换。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) {
// 1. 准备一个 JSON 格式的字符串
String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
// 2. 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 3. 调用 readValue 方法进行转换
// 参数1: JSON字符串
// 参数2: 要转换成的Java对象的类型
User user = objectMapper.readValue(jsonString, User.class);
// 4. 验证结果
System.out.println("转换成功!");
System.out.println(user.getName()); // 输出: John
System.out.println(user.getAge()); // 输出: 30
System.out.println(user.getCity()); // 输出: New York
System.out.println(user); // 输出: User{name='John', age=30, city='New York'}
} catch (JsonProcessingException e) {
System.err.println("JSON 解析失败!");
e.printStackTrace();
}
}
}
使用 Gson
Google 的 Gson 是另一个非常受欢迎的 JSON 库,以其简洁易用而闻名。
添加 Maven 依赖
在 pom.xml 文件中添加 Gson 依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 建议使用最新版本 -->
</dependency>
准备 Java 实体类
Gson 也需要一个对应的 Java 类,与 Jackson 的要求类似(需要无参构造函数和 getter/setter)。
// User.java (与上面 Jackson 的示例相同)
public class User {
private String name;
private int age;
private String city;
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 String getCity() { return city; }
public void setCity(String city) { this.city = city; }
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", city='" + city + '\'' +
'}';
}
}
执行转换
使用 Gson 类来完成转换。

import com.google.gson.Gson;
public class GsonExample {
public static void main(String[] args) {
// 1. 准备一个 JSON 格式的字符串
String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
// 2. 创建 Gson 实例
Gson gson = new Gson();
// 3. 调用 fromJson 方法进行转换
// 参数1: JSON字符串
// 参数2: 要转换成的Java对象的类型
User user = gson.fromJson(jsonString, User.class);
// 4. 验证结果
System.out.println("转换成功!");
System.out.println(user.getName()); // 输出: John
System.out.println(user.getAge()); // 输出: 30
System.out.println(user.getCity()); // 输出: New York
System.out.println(user); // 输出: User{name='John', age=30, city='New York'}
}
}
转换为 Map 或 List
JSON 结构是动态的,或者你不想创建对应的 Java 类,这时,可以直接将其转换为 Map 或 List。
示例:使用 Jackson 转换为 Map
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
public class JsonToMapExample {
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
ObjectMapper objectMapper = new ObjectMapper();
// 使用 TypeReference 来指定泛型类型,这是关键!
// 如果直接写 Map.class, Jackson 会不知道 Map 的 Value 类型是 String, Integer 还是其他。
Map<String, Object> dataMap = objectMapper.readValue(jsonString, new TypeReference<Map<String, Object>>() {});
System.out.println("转换后的 Map: " + dataMap);
System.out.println("Name: " + dataMap.get("name")); // 输出: Name: John
System.out.println("Age: " + dataMap.get("age")); // 输出: Age: 30 (类型是 Integer)
}
}
示例:使用 Gson 转换为 Map
Gson 的处理方式更直接。
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;
public class JsonToMapGsonExample {
public static void main(String[] args) {
String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
Gson gson = new Gson();
// 使用 TypeToken 来指定泛型类型
Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
Map<String, Object> dataMap = gson.fromJson(jsonString, mapType);
System.out.println("转换后的 Map: " + dataMap);
System.out.println("Name: " + dataMap.get("name")); // 输出: Name: John
System.out.println("Age: " + dataMap.get("age")); // 输出: Age: 30 (类型是 Double)
}
}
总结与对比
| 特性 | Jackson | Gson |
|---|---|---|
| 流行度 | 非常高,Spring Boot 默认使用 | 非常高,Google出品 |
| 性能 | 通常更快,功能更全面 | 性能也很好,但略逊于 Jackson |
| 易用性 | API 功能强大,但初次使用时 TypeReference 可能稍显复杂 |
非常简洁直观,API 设计简单 |
| 灵活性 | 极高,支持流式 API、树模型、数据绑定等多种方式 | 主要专注于数据绑定,简洁 |
| 推荐场景 | 新项目,特别是使用 Spring Boot 等框架的项目 | 需要快速集成,或者项目对简洁性要求高 |
如何选择?
- 新项目,尤其是使用 Spring Boot 的:强烈推荐 Jackson,它是事实上的标准,与生态系统集成得最好。
- 追求极致简洁:Gson 是一个非常好的选择,几行代码就能完成转换。
- 旧项目维护:根据项目已有的依赖来决定,保持一致性最重要。
无论选择哪个库,核心步骤都是:
- 添加依赖
- 创建一个与 JSON 结构匹配的 Java 类(或使用
Map/List) - 实例化库的核心类(
ObjectMapper/Gson) - 调用核心方法(
readValue/fromJson)进行转换
