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

Java Rest Assured获取JSON响应数组大小时报参数未定义错误如何解决

问题根因

你遇到的报错是因为混用了标准JSONPath语法和RestAssured默认使用的Groovy GPath语法:
RestAssured自带的response.path()、JsonPath.get()方法默认解析的是GPath表达式,你写的$..roles中,$在GPath语法中会被识别为参数占位符的前缀,框架会把后续的roles当成需要动态传入的参数,而非JSONPath的递归搜索语法,因此抛出参数未定义的异常。

解决方案

方案1:使用RestAssured默认GPath语法(推荐,无需额外依赖)

GPath语法更贴合Java/Groovy写法,无需额外配置就能直接使用:

// 统计roles数组长度
int countRoles = response.path("Data.roles.size()");
System.out.println(countRoles);

// 递归查找所有层级下的ROLEKEY字段(等价标准JSONPath的$..ROLEKEY)
List<String> roleKeys = response.path("**.ROLEKEY");
System.out.println(roleKeys);

其中**是GPath中递归搜索所有子层级的语法,等价于标准JSONPath的$..。

方案2:使用标准JSONPath语法

如果你坚持要用标准JSONPath写法,直接引入Jayway JsonPath依赖,用原生API解析响应字符串即可:

// 先把响应转为字符串
String responseStr = response.asString();
// 统计roles数组长度
int countRoles = com.jayway.jsonpath.JsonPath.read(responseStr, "$..roles.length()");
// 读取所有ROLEKEY
List<String> roleKeys = com.jayway.jsonpath.JsonPath.read(responseStr, "$..ROLEKEY");

内容的提问来源于stack exchange,提问作者Vladek 721

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:03