使用Rest Assured JsonPath提取指定字段值报错求助
解决Rest Assured JsonPath提取字段的语法错误问题
嘿,我看到你在用Rest Assured的JsonPath提取特定条目字段时遇到了语法报错,咱们来快速搞定这个问题~
问题根源
你当前用的是标准JSONPath的过滤语法([?(@.pyRuleSetName == 'TradeMarks')]),但Rest Assured默认使用的是Groovy GPath表达式,不是纯JSONPath,这就是导致你收到invalid JSON expression错误的核心原因。
推荐解决方案(原生GPath语法)
直接用Rest Assured原生支持的GPath语法实现需求,代码简洁且无需额外配置:
// 使用Groovy GPath语法查找匹配条目并提取目标字段 String filterValue = response.jsonPath().getString("pxResults.find { it.pyRuleSetName == 'TradeMarks' }.pzSetRuleSetFilter"); System.out.println(filterValue);
代码解释:
pxResults.find { ... }:在pxResults数组中定位第一个满足条件的元素it.pyRuleSetName == 'TradeMarks':it代表数组中的当前元素,匹配pyRuleSetName等于TradeMarks的条目.pzSetRuleSetFilter:直接提取匹配条目中的目标字段值
按照你提供的示例JSON结构,这段代码会正确输出01-02-2018。
备选方案(标准JSONPath语法)
如果你坚持要用标准JSONPath语法,需要切换Rest Assured的JsonPath实现为Jayway JsonPath,步骤如下:
- 引入Jayway JsonPath的依赖(比如Maven或Gradle)
- 按以下方式编写代码:
import com.jayway.jsonpath.JsonPath; // 获取响应体字符串 String responseBody = response.getBody().asString(); // 使用标准JSONPath语法查询 String filterValue = JsonPath.read(responseBody, "$.pxResults[?(@.pyRuleSetName == 'TradeMarks')].pzSetRuleSetFilter"); System.out.println(filterValue);
不过这种方法需要额外引入依赖,不如第一种GPath方案便捷。
内容的提问来源于stack exchange,提问作者user3803807
相关产品推荐
相关产品推荐

