Java项目RestAssured使用Groovy JSON路径查询报错求助
解决RestAssured中JSONPath查询触发Groovy语法错误的问题
我一眼就看出问题出在你给getString()方法传参时额外加的引号上!咱们一步步来理清楚:
错误原因
RestAssured的jsonPath().getString()方法接受的是纯JSONPath表达式,但你在代码里给每个路径加了额外的引号:
String key = "\"" + path + "\"";
这就导致Groovy把整个带引号的字符串当成了Groovy脚本片段去解析,而Groovy里字符串中的$是变量插值的标识,它会尝试解析$.[0].xxx,但这个写法不符合Groovy的插值语法(正确的插值格式是${xxx}),所以直接触发了"illegal string body character after dollar sign"的语法错误。
修正后的代码
你只需要去掉多余的引号,直接把原始的JSONPath表达式传给getString()就可以了:
// 保持你的JSONPath列表不变(甚至还可以简化,比如$.[0].city可以写成$[0].city) List<String> jsonPaths = new ArrayList<>(List.of("$.[0].city", "$.[0].car", "$.[0].name", "$.[0].familyName")); for (String path : jsonPaths) { String value = rawRes.jsonPath().getString(path); // 用Assert.assertNotNull更规范,和你原来的逻辑完全一致 Assert.assertNotNull(value); }
额外优化建议
如果你的JSON响应数组里只有一个元素,其实JSONPath表达式还可以进一步简化,比如$.[0].city可以写成$[0].city,甚至直接用city(不过为了可读性和后续兼容性,还是推荐保留数组索引的写法,避免后续数组元素数量变化时出问题)。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

