杰瑞科技汇

Java如何高效解析JSON数组?

Java 解析 JSON 数组

在 Java 中解析 JSON 数组有多种方法,以下是几种常用的方式:

使用 org.json 库

首先添加依赖(Maven):

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20251013</version>
</dependency>

示例代码:

import org.json.JSONArray;
import org.json.JSONObject;
public class JsonArrayParser {
    public static void main(String[] args) {
        String jsonArrayStr = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Alice\",\"age\":25}]";
        // 解析 JSON 数组
        JSONArray jsonArray = new JSONArray(jsonArrayStr);
        // 遍历数组
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            String name = jsonObject.getString("name");
            int age = jsonObject.getInt("age");
            System.out.println("Name: " + name + ", Age: " + age);
        }
    }
}

使用 Gson 库

首先添加依赖(Maven):

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

示例代码:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
class Person {
    private String name;
    private int age;
    // 构造方法、getter和setter
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() { return name; }
    public int getAge() { return age; }
}
public class GsonJsonParser {
    public static void main(String[] args) {
        String jsonArrayStr = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Alice\",\"age\":25}]";
        Gson gson = new Gson();
        Type listType = new TypeToken<List<Person>>() {}.getType();
        List<Person> personList = gson.fromJson(jsonArrayStr, listType);
        // 遍历列表
        for (Person person : personList) {
            System.out.println("Name: " + person.getName() + ", Age: " + person.getAge());
        }
    }
}

使用 Jackson 库

首先添加依赖(Maven):

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

示例代码:

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class JacksonJsonParser {
    public static void main(String[] args) throws Exception {
        String jsonArrayStr = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Alice\",\"age\":25}]";
        ObjectMapper objectMapper = new ObjectMapper();
        List<Person> personList = objectMapper.readValue(jsonArrayStr, new TypeReference<List<Person>>() {});
        // 遍历列表
        for (Person person : personList) {
            System.out.println("Name: " + person.getName() + ", Age: " + person.getAge());
        }
    }
}

使用 Java 内置的 javax.json (Jakarta JSON API)

如果使用 Java EE 或 Jakarta EE,可以使用内置的 JSON API:

import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;
public class JakartaJsonParser {
    public static void main(String[] args) {
        String jsonArrayStr = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Alice\",\"age\":25}]";
        try (JsonReader reader = Json.createReader(new StringReader(jsonArrayStr))) {
            JsonArray jsonArray = reader.readArray();
            for (int i = 0; i < jsonArray.size(); i++) {
                JsonObject jsonObject = jsonArray.getJsonObject(i);
                String name = jsonObject.getString("name");
                int age = jsonObject.getInt("age");
                System.out.println("Name: " + name + ", Age: " + age);
            }
        }
    }
}

使用 Java 11+ 的内置 JSON API

Java 11 引入了内置的 JSON API(实验性):

import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;
public class Java11JsonParser {
    public static void main(String[] args) {
        String jsonArrayStr = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Alice\",\"age\":25}]";
        try (JsonReader reader = Json.createReader(new StringReader(jsonArrayStr))) {
            JsonArray jsonArray = reader.readArray();
            for (int i = 0; i < jsonArray.size(); i++) {
                JsonObject jsonObject = jsonArray.getJsonObject(i);
                String name = jsonObject.getString("name");
                int age = jsonObject.getInt("age");
                System.out.println("Name: " + name + ", Age: " + age);
            }
        }
    }
}

选择建议

  • 简单解析:使用 org.json 库,轻量级且简单易用
  • 复杂对象映射:使用 GsonJackson,功能更强大,支持复杂对象映射
  • Java EE 环境:可以使用内置的 javax.json
  • 现代 Java 项目:推荐使用 JacksonGson,社区支持好,功能全面

方法都可以有效地解析 JSON 数组,选择哪种方法取决于你的具体需求和项目环境。

分享:
扫描分享到社交APP
上一篇
下一篇