如何用RestAssured的JsonPath从JSON中提取display_name列表?
解决JsonPath提取动态键下display_name的问题
你的问题出在JsonPath路径没有正确处理data是数组的情况。原JSON中data是数组结构,必须先遍历数组内的元素,再匹配types下的所有动态键。
修正后的JsonPath写法
直接给路径加上数组通配符[*]来遍历data数组即可:
JsonPath json = response.jsonPath(); List<String> list = json.getList("data[*].types.*.display_name");
路径各部分含义:
data[*]:遍历data数组中的每一个元素types.*:遍历当前元素下types对象的所有键值对.display_name:提取每个键值对中的display_name字段
备选方案(手动遍历)
如果需要更灵活的自定义处理逻辑,也可以手动遍历数据结构:
List<Map<String, Object>> dataList = json.getList("data"); List<String> displayNames = new ArrayList<>(); for (Map<String, Object> dataItem : dataList) { // 取出types对象并做类型转换 Map<String, Map<String, String>> typesMap = (Map<String, Map<String, String>>) dataItem.get("types"); // 遍历types下所有值,提取display_name for (Map<String, String> typeDetail : typesMap.values()) { displayNames.add(typeDetail.get("display_name")); } }
内容的提问来源于stack exchange,提问作者Mike Sky
相关产品推荐
相关产品推荐

