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
相关产品推荐
相关产品推荐

