Vla*_*rin 4 java groovy json jsonpath rest-assured
我正在解析如下的 JSON:
jobs1: [
{
request: {
body: {
jobID: "79ceeeff-53b9-4645-80bd-95dfca6fe1e9",
...
jobs2: [
{
request: {
body: {
jobID: "60e7c286-f936-4f96-87bc-6bd55f107514",
Run Code Online (Sandbox Code Playgroud)
并寻找一种在 JSON 路径中使用通配符的方法。
我在 Java 中使用RestAssured框架。执行如下代码后:
List<String> ids = get("/state/").path("*.request.body.jobID");
System.out.println(ids);
Run Code Online (Sandbox Code Playgroud)
我希望得到:
[79ceeeff-53b9-4645-80bd-95dfca6fe1e9, 60e7c286-f936-4f96-87bc-6bd55f107514]
Run Code Online (Sandbox Code Playgroud)
但相反,我得到了一个例外:
java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: unexpected token: *. @ line 1, column 27.
*.request.body.jobID
^
Run Code Online (Sandbox Code Playgroud)
我已经浏览了这些教程,但似乎没有什么对我有用:
https://github.com/json-path/JsonPath
http://goessner.net/articles/JsonPath
如何正确使用 JsonPath 中的通配符?
转到http://jsonpath.herokuapp.com/
并在给定的图像中给出像绿框一样的输入。
您的模式应该如下所示
*.[*].request.body.jobID
您的 JSON 应该如下所示
{
jobs1: [{
request: {
body: {
jobID: "79ceeeff-53b9-4645-80bd-95dfca6fe1e9"
}
}
}
],
jobs2: [{
request: {
body: {
jobID: "60e7c286-f936-4f96-87bc-6bd55f107514"
}
}
}
]
}Run Code Online (Sandbox Code Playgroud)
你会得到如下结果
[
"79ceeeff-53b9-4645-80bd-95dfca6fe1e9",
"60e7c286-f936-4f96-87bc-6bd55f107514"
]Run Code Online (Sandbox Code Playgroud)
*.[*].request.body.jobID这将单独提取 jobID,如下所示
[
"79ceeeff-53b9-4645-80bd-95dfca6fe1e9",
"60e7c286-f936-4f96-87bc-6bd55f107514"
]
Run Code Online (Sandbox Code Playgroud)