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

如何从根为数组的JSONPath中提取od_pair字段值?

解决JsonPath遍历根数组提取od_pair的问题

看起来你遇到了RestAssured JsonPath参数化语法错误,还有循环边界的问题,我来帮你一步步解决:

错误原因分析

  1. 语法错误:你用[j].od_pair的写法不符合JsonPath的参数化规则,Groovy解析时无法识别这个语法,所以抛出了unexpected token: [的错误。正确的参数占位符应该是${j}。
  2. 循环边界问题:你的循环条件是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:27:52