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 类型 ListgsonList

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