Java RestAssured:从json对象获取具有指定值的键值

Java RestAssured:从json对象获取具有指定值的键值,java,rest-assured,serenity-bdd,rest-assured-jsonpath,Java,Rest Assured,Serenity Bdd,Rest Assured Jsonpath,在测试用例中,我使用以下响应执行调用: [ { "ourID": "770050010000000010", "date": "2019-03-07", "otherValue": null }, { "ourID": "770050010000000020",

在测试用例中,我使用以下响应执行调用:

[
    {
        "ourID": "770050010000000010",
        "date": "2019-03-07",
        "otherValue": null
    },
    {
        "ourID": "770050010000000020",
        "date": "2019-03-07",
        "otherValue": null
    }
]
测试由Serenity执行,我使用Restasured执行调用:

Response response = RestAssuredApiHelper.baseRestCall(headers, baseUrl, path)
                .body(requestBody)
                .post();

assertThat(response.getBody().jsonPath().get("$.[?(@.ourID=='770050010000000010')].date"), contains("2019-03-07"));
断言不起作用,可能是因为restasured使用Gpath而不是JsonPath,但在我阅读的所有文档中都有这样的例子。 我错过了什么

我得到的错误是:

java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: unexpected token: [ @ line 1, column 29.
                            $.[?(@.meteringPointEANID=='770050010000000010')].energySource
                               ^

1 error
检查以下代码:-(我相信json表达式是正确的,没有检查)

POM相关性:---


com.jayway.jsonpath
json路径
2.1.0

将JsonPath与Restarsured一起使用的另一种方法是使用Restarsured的内置反序列化机制

如果您不知道对象的返回类型,可以检查以下内容:

通用解决方案将如下所示:

Response response = RestAssuredApiHelper.baseRestCall(headers, baseUrl, path)
                .body(requestBody)
                .post();

List<Map<String, Object>> objects =  response.getBody().as(new TypeRef<>() {});
Map<String, Object> singleObject = objects.stream().filter((Map<String, Object> object) -> object.get("ourID").equals("770050010000000010"))
                .peek(System.out::println)
                .findFirst().get();

System.out.println(singleObject.get("ourID")); // 770050010000000010
Response-Response=restasuredapihelper.baseRestCall(标题、baseUrl、路径)
.body(requestBody)
.post();
List objects=response.getBody().as(新的TypeRef(){});
Map singleObject=objects.stream().filter((Map object)->object.get(“ourID”).equals(“7700501000000010”))
.peek(System.out::println)
.findFirst().get();
System.out.println(singleObject.get(“ourID”);//770050010000000010
如果您知道响应对象是什么,它甚至更简单:

List<YourResponseObject> yourResponseObjects = response.getBody().as(new TypeRef<>() {});
将yourResponseObject=response.getBody().as列为(新的TypeRef(){});

第一行显示此错误:对于类型为JsonPathadded的依赖项检查,方法parse(String)未定义,它接受下面帮助您的任何一个答案,以便对其他人有所帮助
Response response = RestAssuredApiHelper.baseRestCall(headers, baseUrl, path)
                .body(requestBody)
                .post();

List<Map<String, Object>> objects =  response.getBody().as(new TypeRef<>() {});
Map<String, Object> singleObject = objects.stream().filter((Map<String, Object> object) -> object.get("ourID").equals("770050010000000010"))
                .peek(System.out::println)
                .findFirst().get();

System.out.println(singleObject.get("ourID")); // 770050010000000010
List<YourResponseObject> yourResponseObjects = response.getBody().as(new TypeRef<>() {});
assertEquals(response.path("find {it.ourID == '770050010000000010'}.date"), "2019-03-07")