JsonPath中的通配符

时间:2017-06-21 14:21:35

标签: java json groovy rest-assured jsonpath

我正在解析如下的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中正确使用通配符?

3 个答案:

答案 0 :(得分:2)

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

[  
   "79ceeeff-53b9-4645-80bd-95dfca6fe1e9",
   "60e7c286-f936-4f96-87bc-6bd55f107514"
]

答案 1 :(得分:2)

GOTO http://jsonpath.herokuapp.com/

在给定图像中输入绿框等输入。

您的模式应如下所示

  

*。[*]。request.body.jobID

您的JSON应如下所示

&#13;
&#13;
{
	jobs1: [{
			request: {
				body: {
					jobID: "79ceeeff-53b9-4645-80bd-95dfca6fe1e9"
				}
			}
		}
	],
	jobs2: [{
			request: {
				body: {
					jobID: "60e7c286-f936-4f96-87bc-6bd55f107514"
				}
			}
		}
	]
}
&#13;
&#13;
&#13;

您的结果将如下所示

&#13;
&#13;
[
   "79ceeeff-53b9-4645-80bd-95dfca6fe1e9",
   "60e7c286-f936-4f96-87bc-6bd55f107514"
]
&#13;
&#13;
&#13;

enter image description here

答案 2 :(得分:0)

你真的需要wildcards吗?这似乎能够找回你的期望:

..request.body.jobID

甚至更简单:

..jobID