准备工作:添加依赖
你需要在你的项目中添加相应的库依赖。

如果使用 Maven (pom.xml)
Jackson (推荐)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 使用最新的稳定版本 -->
</dependency>
Gson
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 使用最新的稳定版本 -->
</dependency>
如果使用 Gradle (build.gradle)
Jackson
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
Gson

implementation 'com.google.code.gson:gson:2.10.1'
List 转换为 JSON 字符串
假设我们有一个 User 对象的列表。
定义一个简单的 Java Bean (POJO)
// User.java
public class User {
private String name;
private int age;
private String email;
// 必须有无参构造函数,Jackson 和 Gson 在反序列化时会用到
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 + '\'' +
'}';
}
}
使用 Jackson 进行转换
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.List;
public class ListToJsonJackson {
public static void main(String[] args) {
// 1. 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
// 2. 创建一个 User 对象的 List
List<User> userList = Arrays.asList(
new User("Alice", 30, "alice@example.com"),
new User("Bob", 24, "bob@example.com"),
new User("Charlie", 35, "charlie@example.com")
);
try {
// 3. 将 List 转换为 JSON 字符串
// objectMapper.writeValueAsString() 可以直接转换任何 Java 对象
String jsonString = objectMapper.writeValueAsString(userList);
// 4. 打印结果
System.out.println("Jackson: List -> JSON");
System.out.println(jsonString);
// 输出:
// [
// {"name":"Alice","age":30,"email":"alice@example.com"},
// {"name":"Bob","age":24,"email":"bob@example.com"},
// {"name":"Charlie","age":35,"email":"charlie@example.com"}
// ]
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
使用 Gson 进行转换
import com.google.gson.Gson;
import java.util.Arrays;
import java.util.List;
public class ListToJsonGson {
public static void main(String[] args) {
// 1. 创建 Gson 实例
Gson gson = new Gson();
// 2. 创建一个 User 对象的 List
List<User> userList = Arrays.asList(
new User("Alice", 30, "alice@example.com"),
new User("Bob", 24, "bob@example.com"),
new User("Charlie", 35, "charlie@example.com")
);
// 3. 将 List 转换为 JSON 字符串
// gson.toJson() 可以直接转换任何 Java 对象
String jsonString = gson.toJson(userList);
// 4. 打印结果
System.out.println("Gson: List -> JSON");
System.out.println(jsonString);
// 输出:
// [{"name":"Alice","age":30,"email":"alice@example.com"},{"name":"Bob","age":24,"email":"bob@example.com"},{"name":"Charlie","age":35,"email":"charlie@example.com"}]
}
}
JSON 字符串转换为 List
现在我们有一个 JSON 字符串,需要将其转换回 List<User>。
使用 Jackson 进行转换
Jackson 在将 JSON 转换为 List 时,需要使用 TypeReference 来明确指定泛型的类型,否则它默认会转换成 ListLinkedHashMap。
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class JsonToListJackson {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = "[\n" +
" {\"name\":\"Alice\",\"age\":30,\"email\":\"alice@example.com\"},\n" +
" {\"name\":\"Bob\",\"age\":24,\"email\":\"bob@example.com\"}\n" +
"]";
try {
// 使用 TypeReference 来明确指定目标类型为 List<User>
List<User> userList = objectMapper.readValue(jsonString, new TypeReference<List<User>>() {});
// 打印结果
System.out.println("Jackson: JSON -> List");
userList.forEach(System.out::println);
// 输出:
// User{name='Alice', age=30, email='alice@example.com'}
// User{name='Bob', age=24, email='bob@example.com'}
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 Gson 进行转换
Gson 的 fromJson 方法可以直接使用 User[].class 作为参数,因为 Gson 可以从数组类型推断出 List<User> 的类型。

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
public class JsonToListGson {
public static void main(String[] args) {
Gson gson = new Gson();
String jsonString = "[\n" +
" {\"name\":\"Alice\",\"age\":30,\"email\":\"alice@example.com\"},\n" +
" {\"name\":\"Bob\",\"age\":24,\"email\":\"bob@example.com\"}\n" +
"]";
// 方法一:使用数组类型 (推荐)
// Gson 会自动将数组转换为 List
List<User> userList1 = gson.fromJson(jsonString, User[].class);
System.out.println("Gson (数组方式): JSON -> List");
userList1.forEach(System.out::println);
// 方法二:使用 TypeToken (更灵活,适用于复杂泛型)
// 这是 Gson 中处理泛型的标准方式
Type userListType = new TypeToken<List<User>>(){}.getType();
List<User> userList2 = gson.fromJson(jsonString, userListType);
System.out.println("\nGson (TypeToken方式): JSON -> List");
userList2.forEach(System.out::println);
}
}
| 特性 | Jackson | Gson |
|---|---|---|
| 依赖 | jackson-databind |
gson |
| List -> JSON | objectMapper.writeValueAsString(list) |
gson.toJson(list) |
| JSON -> List | objectMapper.readValue(json, new TypeReference<List<T>>() {}); |
gson.fromJson(json, new TypeToken<List<T>>() {}.getType()); 或者 gson.fromJson(json, T[].class) |
| 性能 | 通常更快,功能更强大,是 Spring Boot 的默认选择。 | 速度稍慢,但 API 简单直观,非常稳定。 |
| 易用性 | 对于复杂泛型类型,需要 TypeReference,稍显繁琐。 |
API 非常简洁,对于常用场景非常容易上手。 |
| 灵活性 | 提供了丰富的 API,如流式 API、树模型等,功能更全面。 | 主要专注于序列化和反序列化,功能相对专注。 |
如何选择?
- 新项目,特别是基于 Spring Boot 的项目:强烈推荐 Jackson,它是 Spring 框架生态系统的默认选择,集成度高,性能优秀。
- Android 开发:推荐 Gson,Google 官方出品,在 Android 环境中表现稳定,并且不需要额外的依赖配置(在较新的 Android 版本中,Gson 已被移出标准库,但仍需手动添加)。
- 简单项目或个人项目:两者都可以,Gson 的 API 可能更简单一些,Jackson 的功能更强大,但学习曲线也稍高一点。
希望这份详细的指南能帮助你!
