1. 引言
JSON 是在服务器与客户端之间传输数据的流行数据交换格式。然而,在许多情况下,我们可能需要将一个 JSON 数组转换为 Java 的 List
对象,以便进行进一步处理或数据操作。
在这个教程中,我们将比较使用 Java 中两个流行的 JSON 库——Gson 和 Jackson 实现这种转换的不同方法。
2. 使用 Gson 库
Gson 是一个广泛使用的 Java JSON 库,用于序列化和反序列化 Java 对象从 JSON 到 Java。它提供了一个简单的方法将 JSON 数组转换为 List
对象。
2.1. Gson Maven 依赖项
我们需要将 Gson 库 添加到项目依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
2.2. 将 JSON 数组转换为 Java List
在本节中,我们将讨论如何使用 Gson 将 JSON 数组转换为 List
。
考虑一个 JSON 数组的例子:
[
{\"id\":1,\"name\":\"Icecream\",\"description\":\"Sweet and cold\"},
{\"id\":2,\"name\":\"Apple\",\"description\":\"Red and sweet\"},
{\"id\":3,\"name\":\"Carrot\",\"description\":\"Good for eyes\"}
];
上述 JSON 数组代表一个 Product
类型的 List
:
public class Product {
private int id;
private String name;
private String description;
public Product(int id, String name, String description) {
this.id = id;
this.name = name;
this.description = description;
}
// getter and setter
}
现在我们有了 JSON 数组,让我们看看如何将其转换为 List
:
@Test
public void whenUsingGsonLibrary_thenCompareTwoProducts() {
Gson gson = new Gson();
Type listType = new TypeToken<List<Product>>() {}.getType();
List<Product> gsonList = gson.fromJson(jsonArray, listType);
Assert.assertEquals(1, gsonList.get(0).getId());
Assert.assertEquals("Sweet and cold", gsonList.get(0).getDescription());
Assert.assertEquals("Icecream", gsonList.get(0).getName());
}
首先,我们需要创建一个 Gson
类的实例,它提供了 JSON 序列化和反序列化的功能。
我们可以使用 TypeToken
类指定目标 List
的类型。在上面的例子中,我们定义了目标类型为 List<Product>
。
然后,我们使用 Gson
对象的 fromJson()
方法将 JSON 数组字符串转换为 List
。
既然我们已经将 JSON 数组转换为了 List
,我们也来看看断言。在断言中,我们比较 JSON 字符串中的特定字段(如 ID 或描述)与表示 Product
类型 List
的 gsonList
。
3. 使用 Jackson 库
Jackson 是另一个广受欢迎的 Java JSON 库。接下来,我们将讨论如何使用 Jackson 库将 JSON 数组转换为 List
。
3.1. Jackson Maven 依赖项
我们需要添加以下 Jackson 库 到项目依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
3.2. 使用 Jackson 转换 JSON 数组为 Java List
在本节中,我们将讨论如何使用 Jackson 将 JSON 数组转换为 List
:
@Test
public void whenUsingJacksonLibrary_thenCompareTwoProducts() throws JsonProcessingException {
// The jsonArray is the same JSON array from the above example
ObjectMapper objectMapper = new ObjectMapper();
TypeReference<List<Product>> listType = new TypeReference<List<Product>>() {};
List<Product> jacksonList = objectMapper.readValue(jsonArray, jacksonTypeReference);
Assert.assertEquals(1, jacksonList.get(0).getId());
Assert.assertEquals("Sweet and cold", jacksonList.get(0).getDescription());
Assert.assertEquals("Icecream", jacksonList.get(0).getName());
}
我们创建一个 ObjectMapper
类的实例,它是 Jackson 库进行数据操作的核心类。
同样,我们可以使用 TypeReference
类指定目标 List
的类型。在上面的例子中,我们定义了目标类型为 List<Product>
。
然后,我们使用 ObjectMapper
对象的 readValue()
方法将 JSON 数组字符串转换为 List
。
与之前的断言类似,最后,我们比较 JSON 字符串中的特定字段与 jacksonList
对应的字段。
4. 总结
在这篇文章中,我们讨论了如何使用 Gson 和 Jackson 两个流行的库将 JSON 数组转换为 Java 的 List
。
Gson 提供了简洁的方法,而 Jackson 提供了更高级的功能和高性能。选择 Gson 还是 Jackson 取决于具体的项目需求和个人偏好。
如需查看示例代码,请访问 GitHub。