RestAssured中如何通过比较JSON字段提取并打印指定值
高效提取指定类型袋号的解决方案
直接用JSONPath过滤提取
不需要分开提取两个列表再对比,JSONPath支持过滤表达式,可以直接筛选出bagtype为cash的对象并提取bagnumber,代码如下:
// 一步提取符合条件的bagnumber列表 List<String> cashBagNumbers = response.jsonPath().getList("$.findAll { it.bagtype == 'cash' }.bagnumber"); // 拼接成目标输出格式 String result = "Bag numbers are: " + String.join(", ", cashBagNumbers); System.out.println(result);
代码说明:
$.findAll { it.bagtype == 'cash' }:遍历JSON数组,筛选出所有bagtype等于cash的对象.bagnumber:提取筛选后对象的bagnumber字段,直接得到目标列表String.join(", ", cashBagNumbers):将列表元素拼接成逗号分隔的字符串,输出符合要求的格式
用Hamcrest Matchers做验证(可选)
如果需要验证提取结果是否符合预期,可以结合Hamcrest的Matchers类:
import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.containsInAnyOrder; // 验证提取的列表包含指定元素 response.then().body("findAll { it.bagtype == 'cash' }.bagnumber", hasItems("B", "D")); // 若要求元素顺序一致,使用containsInAnyOrder response.then().body("findAll { it.bagtype == 'cash' }.bagnumber", containsInAnyOrder("B", "D"));
内容的提问来源于stack exchange,提问作者user2024
相关产品推荐
相关产品推荐

