【发布时间】:2017-06-21 14:21:35
【问题描述】:
我正在解析如下 JSON:
jobs1: [
{
request: {
body: {
jobID: "79ceeeff-53b9-4645-80bd-95dfca6fe1e9",
...
jobs2: [
{
request: {
body: {
jobID: "60e7c286-f936-4f96-87bc-6bd55f107514",
并且正在寻找一种在 JSON 路径中使用通配符的方法。
我在 Java 中使用 RestAssured 框架。执行如下代码后:
List<String> ids = get("/state/").path("*.request.body.jobID");
System.out.println(ids);
我希望得到:
[79ceeeff-53b9-4645-80bd-95dfca6fe1e9, 60e7c286-f936-4f96-87bc-6bd55f107514]
但是我得到了一个例外:
java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: unexpected token: *. @ line 1, column 27.
*.request.body.jobID
^
我浏览了这些教程,但似乎没有什么对我有用:
https://github.com/json-path/JsonPath
http://goessner.net/articles/JsonPath
如何在 JsonPath 中正确使用通配符?
【问题讨论】:
-
您是否尝试过使用
children而不是*?参照。 github.com/rest-assured/rest-assured/wiki/… 和 groovy-lang.org/processing-xml.html#_gpath -
@D.Kovács
"children().request.body.jobID"给了IllegalArgumentException: No signature of method: java.util.HashMap.children() is applicable for argument types: () values: [] -
我也在试图弄清楚如何使用通配符。但是,如果您需要临时解决方案,则可以使用以下方法。 def jsonSlurper = 新的 JsonSlurper(); def jsonResponse = jsonSlurper.parseText(sampleJson); def listOfJobIds = []; jsonResponse.keySet().each{node -> listOfJobIds.add(jsonResponse[node].request.body.jobID[0]); } log.info listOfJobIds;
标签: java json groovy rest-assured jsonpath