如何解析和处理 JSON 格式的数组数据 - Java

在 Java 开发中,我们经常会遇到需要处理 JSON 格式的数组数据的情况。本文将介绍如何使用 Java 解析和处理 JSON 格式的数组数据,并提供代码示例来解决一个具体的问题。

1. 问题描述

假设我们有一个 JSON 格式的数组数据,形式如下所示:

[
  {
    "name": "Alice",
    "age": 20,
    "gender": "female"
  },
  {
    "name": "Bob",
    "age": 25,
    "gender": "male"
  },
  {
    "name": "Charlie",
    "age": 30,
    "gender": "male"
  }
]

我们需要解析这个 JSON 数组,并根据其中的数据进行一些处理,例如计算年龄平均值、查找特定条件的数据等。

2. 解决方案

要解决这个问题,我们可以使用 Java 中的 JSON 解析库,如 Gson 或 Jackson,来解析 JSON 数组并转换为 Java 对象或集合。下面将分别介绍两个解决方案。

2.1 使用 Gson

Gson 是 Google 提供的一个轻量级的 Java JSON 解析库,可以将 JSON 字符串或数组转换为 Java 对象或集合。

2.1.1 添加 Maven 依赖

首先,在项目的 pom.xml 文件中添加 Gson 的 Maven 依赖:

<dependencies>
  <dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.8</version>
  </dependency>
</dependencies>
2.1.2 解析 JSON 数组

下面是使用 Gson 解析 JSON 数组的代码示例:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class Main {
  public static void main(String[] args) {
    String json = "[{\"name\":\"Alice\",\"age\":20,\"gender\":\"female\"},{\"name\":\"Bob\",\"age\":25,\"gender\":\"male\"},{\"name\":\"Charlie\",\"age\":30,\"gender\":\"male\"}]";

    Gson gson = new Gson();
    List<Person> people = gson.fromJson(json, new TypeToken<List<Person>>() {}.getType());

    for (Person person : people) {
      System.out.println("Name: " + person.getName());
      System.out.println("Age: " + person.getAge());
      System.out.println("Gender: " + person.getGender());
      System.out.println();
    }
  }
}

class Person {
  private String name;
  private int age;
  private String gender;

  // Getters and setters

  // ...
}

上述代码中,我们首先定义了一个 Person 类来表示 JSON 数组中的每个对象。然后,我们使用 Gson 的 fromJson 方法将 JSON 字符串转换为 List<Person> 对象。最后,我们遍历这个列表,输出每个人的名字、年龄和性别。

2.2 使用 Jackson

Jackson 是一个高性能的 JSON 处理库,也可以用来解析和处理 JSON 数组。

2.2.1 添加 Maven 依赖

首先,在项目的 pom.xml 文件中添加 Jackson 的 Maven 依赖:

<dependencies>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.4</version>
  </dependency>
</dependencies>
2.2.2 解析 JSON 数组

下面是使用 Jackson 解析 JSON 数组的代码示例:

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    String json = "[{\"name\":\"Alice\",\"age\":20,\"gender\":\"female\"},{\"name\":\"Bob\",\"age\":25,\"gender\":\"male\"},{\"name\":\"Charlie\",\"age\":30,\"gender\":\"male\"}]";

    ObjectMapper mapper = new ObjectMapper();
    try {
      List<Person> people = mapper.readValue(json, new TypeReference<List<Person>>(){});

      for (Person person : people) {
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
        System.out.println("Gender: " + person.getGender());
        System.out.println();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

class Person {
  private String name;
  private int age;
  private String gender;

  // Getters and setters

  // ...
}