如何从根为数组的JSONPath中提取od_pair字段值?
解决JsonPath遍历根数组提取od_pair的问题
看起来你遇到了RestAssured JsonPath参数化语法错误,还有循环边界的问题,我来帮你一步步解决:
错误原因分析
- 语法错误:你用
[j].od_pair的写法不符合JsonPath的参数化规则,Groovy解析时无法识别这个语法,所以抛出了unexpected token: [的错误。正确的参数占位符应该是${j}。 - 循环边界问题:你的循环条件是
j<=NoofLegs,但数组索引从0开始,最大索引是NoofLegs-1,这样会导致最后一次循环访问超出数组范围的元素,引发索引越界异常。
修正后的代码
下面是修复后的完整代码:
// 获取根数组 List<Object> LegList = jsonPath.getList("$"); int NoofLegs = LegList.size(); System.out.println("No of legs :" + NoofLegs); // 修正循环条件:j < NoofLegs,避免越界 for (int j = 0; j < NoofLegs; j++) { // 使用${j}作为参数占位符 String OD_Pair = jsonPath.param("j", j).getString("[${j}].od_pair"); System.out.println("OD Pair: " + OD_Pair); List<Object> BucketsList = jsonPath.param("j", j).getList("[${j}].buckets"); int NoOfBuckets = BucketsList.size(); System.out.println("no of Buckets: " + NoOfBuckets); }
更简洁的写法(推荐)
其实你不需要手动循环,JsonPath支持直接提取数组中所有对象的od_pair属性,一行代码就能拿到所有值:
// 直接提取所有od_pair到列表中 List<String> allOdPairs = jsonPath.getList("od_pair"); for (String odPair : allOdPairs) { System.out.println("OD Pair: " + odPair); } // 如果需要同时获取每个od_pair对应的buckets数量,也可以这样遍历: List<Map<String, Object>> legMaps = jsonPath.getList("$"); for (Map<String, Object> leg : legMaps) { String odPair = (String) leg.get("od_pair"); List<Object> buckets = (List<Object>) leg.get("buckets"); System.out.println("OD Pair: " + odPair); System.out.println("no of Buckets: " + buckets.size()); }
这种写法更简洁,也避免了手动处理索引的麻烦,代码可读性更高。
内容的提问来源于stack exchange,提问作者Mihir
相关产品推荐
相关产品推荐

