导读:本期聚焦于小伙伴创作的《Java中如何获取并处理REST API返回的JSON数组》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Java中如何获取并处理REST API返回的JSON数组》有用,将其分享出去将是对创作者最好的鼓励。

在Java开发的实际场景中,调用第三方或内部服务的REST API并获取返回的JSON数组是高频操作,比如查询批量用户信息、获取商品列表等场景都需要处理这类数据。完整的流程包括发起HTTP请求、接收响应内容、解析JSON数组、提取所需字段并进行后续业务处理这几个核心环节。

Java中如何获取并处理REST API返回的JSON数组

发起REST API请求获取响应

首先需要通过Java代码发起HTTP请求,获取REST API返回的原始响应字符串。这里以常用的HttpURLConnection为例,演示如何发送GET请求并读取返回内容:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class ApiRequestUtil {
    public static String sendGetRequest(String apiUrl) throws Exception {
        URL url = new URL(apiUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        // 设置请求方法为GET
        connection.setRequestMethod("GET");
        // 设置通用请求属性
        connection.setRequestProperty("Accept", "application/json");
        connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
        
        // 获取响应码
        int responseCode = connection.getResponseCode();
        if (responseCode != 200) {
            throw new RuntimeException("请求失败,响应码:" + responseCode);
        }
        
        // 读取响应内容
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
        StringBuilder responseBuilder = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            responseBuilder.append(line);
        }
        reader.close();
        connection.disconnect();
        return responseBuilder.toString();
    }
}

使用Jackson解析JSON数组

Jackson是Java生态中常用的JSON处理库,功能完善且性能稳定,适合解析复杂的JSON结构。首先需要引入Jackson的依赖,如果是Maven项目,在pom.xml中添加如下配置:

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

假设REST API返回的JSON数组格式如下,每个元素包含id、name、age三个字段:

[
    {"id": 1, "name": "张三", "age": 25},
    {"id": 2, "name": "李四", "age": 28},
    {"id": 3, "name": "王五", "age": 22}
]

首先定义对应的实体类来映射数组元素:

public class User {
    private Integer id;
    private String name;
    private Integer age;
    
    // 必须提供无参构造方法,Jackson反射需要
    public User() {}
    
    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    
    // getter和setter方法
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public Integer getAge() { return age; }
    public void setAge(Integer age) { this.age = age; }
}

接着使用Jackson的ObjectMapper解析JSON数组为User对象列表:

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;

public class JacksonParseDemo {
    public static void main(String[] args) {
        try {
            // 模拟调用API获取返回的JSON字符串
            String jsonResponse = "[{\"id\": 1, \"name\": \"张三\", \"age\": 25}, {\"id\": 2, \"name\": \"李四\", \"age\": 28}, {\"id\": 3, \"name\": \"王五\", \"age\": 22}]";
            ObjectMapper objectMapper = new ObjectMapper();
            // 指定类型引用,解析为List<User>
            List<User> userList = objectMapper.readValue(jsonResponse, new TypeReference<List<User>>() {});
            
            // 遍历处理后的数组数据
            for (User user : userList) {
                System.out.println("用户ID:" + user.getId() + ",名称:" + user.getName() + ",年龄:" + user.getAge());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用Gson解析JSON数组

Gson是Google推出的JSON处理库,使用起来更加简洁,同样在Maven项目中添加依赖:

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

使用Gson解析上述同样的JSON数组,代码更加简洁:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;

public class GsonParseDemo {
    public static void main(String[] args) {
        try {
            String jsonResponse = "[{\"id\": 1, \"name\": \"张三\", \"age\": 25}, {\"id\": 2, \"name\": \"李四\", \"age\": 28}, {\"id\": 3, \"name\": \"王五\", \"age\": 22}]";
            Gson gson = new Gson();
            // 定义目标类型
            Type userListType = new TypeToken<List<User>>(){}.getType();
            List<User> userList = gson.fromJson(jsonResponse, userListType);
            
            // 遍历数据
            for (User user : userList) {
                System.out.println("用户ID:" + user.getId() + ",名称:" + user.getName() + ",年龄:" + user.getAge());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

常见问题与处理技巧

空值或缺失字段处理

实际返回的JSON数组中可能存在字段缺失或值为null的情况,可以在实体类中使用@JsonInclude(Jackson)或@SerializedName(Gson)配合默认值处理,也可以在解析后做非空判断:

// Jackson忽略空值字段的实体类配置示例
import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
    private Integer id;
    private String name;
    // 年龄字段可能为null,设置默认值
    private Integer age = 0;
    
    // 构造方法、getter、setter省略
}

异常处理

实际开发中需要处理请求失败、JSON格式错误、字段类型不匹配等异常,建议将解析逻辑放在try-catch块中,针对不同的异常类型做对应的处理,比如重试请求、返回默认数据等。

大数组分页处理

如果REST API返回的JSON数组数据量很大,建议优先使用API自带的分页参数获取部分数据,避免一次性解析大量数据导致内存溢出。如果必须处理全量数据,可以采用流式解析的方式逐步处理数组元素。

JavaREST_APIJSON_arrayJSON_processing修改时间:2026-06-03 16:05:58

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。