You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何将API返回的JSON数组响应转换为List<Map>结构

将接口返回的data数组转换为Map列表的实现方法

你用的RestAssured内置JsonPath本身就支持直接解析集合结构,不需要手动循环取元素拼字符串,一行代码就能拿到目标List<Map>结构。


核心优化点

  • 不用先调用prettyPrint()把整个响应转成字符串再初始化JsonPath,Response对象自带jsonPath()方法直接解析原始响应,少一步冗余的序列化操作
  • 直接调用getList()方法指定解析路径为data,声明泛型为Map<String, Object>,返回的结果就是你要的Map列表:每个Map的key对应JSON里的字段名(id、name、year等),value对应该字段的实际值,类型会自动匹配(数字类型会自动转成Integer,字符串转成String)

修改后可直接运行的代码

import io.restassured.RestAssured;
import io.restassured.response.Response;
import org.testng.Assert;
import java.util.List;
import java.util.Map;
import static io.restassured.RestAssured.given;

public class ResourceTest {
    public static void main(String[] args) {
        RestAssured.baseURI = "https://reqres.in";

        Response response = given()
                .header("Content-Type", "application/json")
                .when()
                .get("/api/unknown");

        // 状态码校验
        int statusCode = response.getStatusCode();
        System.out.println("响应状态码:" + statusCode);
        Assert.assertEquals(200, statusCode);

        // 直接解析data数组为Map列表
        List<Map<String, Object>> resourceList = response.jsonPath().getList("data");
        System.out.println("Json Array count: " + resourceList.size());

        // 遍历验证结果
        for (Map<String, Object> item : resourceList) {
            System.out.println(item);
            // 取单个字段直接调用get方法即可,例:
            // Integer id = (Integer) item.get("id");
            // String color = (String) item.get("color");
        }
    }
}

结果说明

解析完成后的resourceList中,第一个元素的键值对完全符合你的预期:

  • id → 1(Integer类型)
  • name → "cerulean"(String类型)
  • year → 2000(Integer类型)
  • color → "#98B2D1"(String类型)
  • pantone_value → "15-4020"(String类型)

后续不管是做打印输出还是字段断言,直接从Map中取值即可,完全不需要额外做字符串拆分、格式转换的工作。


内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:57:11