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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:42:30