使用 Jackson (最推荐)
Jackson 是目前 Java 生态中最流行、性能最好的 JSON 库之一,Spring Boot 和许多其他 Java 框架都默认使用它。

添加依赖
如果你使用 Maven,在 pom.xml 中添加 Jackson 核心库的依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 建议使用最新版本 -->
</dependency>
编写代码
Jackson 提供了一个 ObjectMapper 类,它是所有操作的核心。
场景1:List 转成简单的 JSON 数组
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.List;
public class JacksonListToJsonExample {
public static void main(String[] args) {
// 1. 准备一个 List
List<String> nameList = Arrays.asList("Alice", "Bob", "Charlie");
// 2. 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 3. 使用 writeValueAsString 方法将 List 转换为 JSON 字符串
// 结果: ["Alice", "Bob", "Charlie"]
String jsonString = objectMapper.writeValueAsString(nameList);
System.out.println(jsonString);
// List of integers
List<Integer> numberList = Arrays.asList(1, 2, 3, 4, 5);
String numbersJson = objectMapper.writeValueAsString(numberList);
System.out.println(numbersJson); // 结果: [1, 2, 3, 4, 5]
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
场景2:List 转成包含 JSON 对象的数组

这是更常见的情况,即 List 中存放的是自定义的 Java 对象。
步骤:
- 定义一个 Java Bean (POJO)。
- 确保该 Bean 有无参构造函数,并且属性有
getter和setter方法(或者将属性设为public)。 - 使用
ObjectMapper进行转换。
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
// 1. 定义一个简单的 Java Bean
class User {
private String name;
private int age;
private String email;
// Jackson 在反序列化时需要无参构造函数
public User() {
}
// 推荐使用构造函数来初始化属性
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// 必须有 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 getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
// (可选) 重写 toString 方法方便打印
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
}
public class JacksonListObjectToJsonExample {
public static void main(String[] args) {
// 2. 创建一个 User 对象的 List
List<User> userList = new ArrayList<>();
userList.add(new User("Alice", 30, "alice@example.com"));
userList.add(new User("Bob", 25, "bob@example.com"));
userList.add(new User("Charlie", 35, "charlie@example.com"));
// 3. 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 4. 转换为 JSON 字符串
String jsonString = objectMapper.writeValueAsString(userList);
System.out.println(jsonString);
// 输出结果 (为了可读性,格式化后):
// [
// {
// "name" : "Alice",
// "age" : 30,
// "email" : "alice@example.com"
// },
// {
// "name" : "Bob",
// "age" : 25,
// "email" : "bob@example.com"
// },
// {
// "name" : "Charlie",
// "age" : 35,
// "email" : "charlie@example.com"
// }
// ]
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
Jackson 常用配置
ObjectMapper 提供了丰富的配置选项,例如美化输出(格式化 JSON):
ObjectMapper objectMapper = new ObjectMapper(); // 启用美化输出 (indents) objectMapper.enable(SerializationFeature.INDENT_OUTPUT); String jsonString = objectMapper.writeValueAsString(userList); System.out.println(jsonString); // 输出上面那种带缩进的格式
使用 Gson
Google 的 Gson 是另一个非常流行且易于使用的 JSON 库。
添加依赖
Maven 依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 建议使用最新版本 -->
</dependency>
编写代码
Gson 的核心是 Gson 类。
场景1:List 转成简单的 JSON 数组
import com.google.gson.Gson;
import java.util.Arrays;
import java.util.List;
public class GsonListToJsonExample {
public static void main(String[] args) {
List<String> nameList = Arrays.asList("Alice", "Bob", "Charlie");
// 1. 创建 Gson 实例
Gson gson = new Gson();
// 2. 使用 toJson 方法进行转换
String jsonString = gson.toJson(nameList);
System.out.println(jsonString); // 结果: ["Alice","Bob","Charlie"]
}
}
场景2:List 转成包含 JSON 对象的数组
与 Jackson 类似,Gson 也需要 Java Bean。
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
// 使用上面定义好的 User 类
public class GsonListObjectToJsonExample {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
userList.add(new User("Alice", 30, "alice@example.com"));
userList.add(new User("Bob", 25, "bob@example.com"));
Gson gson = new Gson();
String jsonString = gson.toJson(userList);
System.out.println(jsonString);
// 输出结果:
// [{"name":"Alice","age":30,"email":"alice@example.com"},{"name":"Bob","age":25,"email":"bob@example.com"}]
}
}
Gson 美化输出
Gson 默认不美化输出,但可以通过 GsonBuilder 来实现:
import com.google.gson.GsonBuilder; Gson gson = new GsonBuilder().setPrettyPrinting().create(); String prettyJsonString = gson.toJson(userList); System.out.println(prettyJsonString); // 输出格式化后的 JSON
在 Spring Boot 中的使用 (最便捷)
如果你正在使用 Spring Boot,事情会变得非常简单,因为 Jackson 已经是 Spring Boot 的默认依赖,你无需手动添加。
无需额外依赖
确保你的 pom.xml 中有 spring-boot-starter-web,它已经包含了 Jackson。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
使用 @ResponseBody 或 @RestController
在 Spring Boot 中,你只需要在 Controller 方法中返回 List,Spring Boot 会自动使用 Jackson 将其序列化为 JSON 字符串并返回给客户端。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
// 假设 User 类已经定义好
@RestController
public class MyController {
@GetMapping("/users")
public List<User> getUsers() {
List<User> userList = Arrays.asList(
new User("Alice", 30, "alice@example.com"),
new User("Bob", 25, "bob@example.com")
);
// Spring Boot 会自动调用 Jackson 将这个 List 序列化为 JSON
return userList;
}
@GetMapping("/names")
public List<String> getNames() {
return Arrays.asList("Alice", "Bob", "Charlie");
}
}
当你访问 http://localhost:8080/users 时,浏览器会收到如下 JSON 响应:
[
{
"name": "Alice",
"age": 30,
"email": "alice@example.com"
},
{
"name": "Bob",
"age": 25,
"email": "bob@example.com"
}
]
总结与对比
| 特性 | Jackson | Gson | Spring Boot (内置 Jackson) |
|---|---|---|---|
| 易用性 | 非常好,API 丰富 | 非常好,API 简洁 | 极其简单,开箱即用 |
| 性能 | 非常高,业界标杆 | 高,性能也很好 | 高,底层是 Jackson |
| 集成度 | Spring Boot 默认,生态系统成熟 | Google出品,应用广泛 | 无缝集成,无需任何配置 |
| 功能 | 功能最全面,支持流式处理、数据绑定等 | 功能全面,专注于 JSON | 功能由 Jackson 提供 |
| 推荐场景 | 首选,特别是新项目或 Spring Boot 项目 | 如果项目已经使用 Gson,或者偏好 Google 的生态 | Spring 项目的最佳选择 |
- 对于新项目,特别是基于 Spring Boot 的项目,直接使用 Jackson 是最稳妥、最高效的选择。
- 如果你的项目已经深度依赖 Gson,或者你对 Google 的技术栈有偏好,继续使用 Gson 完全没问题。
- 在 Spring Boot 中,你几乎感觉不到 Jackson 的存在,它就像一个默默无闻的英雄,自动为你处理所有 JSON 转换的工作。
