JsonPath 中的通配符

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 中的通配符?

Zen*_*ith 5

转到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)

在此处输入图片说明


Min*_*sha 2

*.[*].request.body.jobID这将单独提取 jobID,如下所示

[  
   "79ceeeff-53b9-4645-80bd-95dfca6fe1e9",
   "60e7c286-f936-4f96-87bc-6bd55f107514"
]
Run Code Online (Sandbox Code Playgroud)