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
相关产品推荐
相关产品推荐

