Java restassed-JsonPath筛选匹配的对象';根据给定的筛选条件,从对象数组中删除属性

Java restassed-JsonPath筛选匹配的对象';根据给定的筛选条件,从对象数组中删除属性,java,json,rest-assured,jsonpath,rest-assured-jsonpath,Java,Json,Rest Assured,Jsonpath,Rest Assured Jsonpath,我正在使用rest-assured为我的微服务编写一个集成测试。我有一个类似这样的Json负载,它从中返回 { "sessionQuestions":[ { "id":1272, "sessionId":1146, "questionId":"1002", }, { "id":1273, "sessionId":1146, "questionId"

我正在使用rest-assured为我的微服务编写一个集成测试。我有一个类似这样的Json负载,它从中返回

{
   "sessionQuestions":[
      {
         "id":1272,
         "sessionId":1146,
         "questionId":"1002",
      },
      {
         "id":1273,
         "sessionId":1146,
         "questionId":"1004",
      }
   ]
}
我需要找到给定questionId值的sessionquestion的id。然后我需要在我的断言中比较它们。给定questionId值,我很难从sessionQuestion中提取id。我正在使用JsonPath来完成这件事。这是我的Json路径表达式

new JsonPath(response).get("$.sessionQuestions[?(@.questionId=='1002')].id");
这会抛出一个错误

java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: expecting EOF, found '[' @ line 1, column 45.
   nRootObject.$.sessionQuestions[?(@.quest
                                 ^

1 error

   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
我在网上尝试了相同的Json路径表达式,效果很好。我使用的是
json-path-2.9.0.jar


我做错了什么?非常感谢您的帮助。

您使用哪个版本的JsonPath?我用

适用于您的案例的代码是:

JsonPath.parse(response).read("$.sessionQuestions[?(@.questionId=='1002')].id").toString();
并尝试使用此JSON:

{
   "sessionQuestions":[
      {
         "id":1272,
         "sessionId":1146,
         "questionId":"1002"
      },
      {
         "id":1273,
         "sessionId":1146,
         "questionId":"1004"
      }
   ]
}
编辑:如果您使用这种依赖性(json-path-2.9.0),您必须这样做:

from(response).getList("sessionQuestions.findAll { it.questionId=='1002' }.id").toString();
import static com.jayway.restassured.path.json.JsonPath.from;
您必须从以下位置导入:

from(response).getList("sessionQuestions.findAll { it.questionId=='1002' }.id").toString();
import static com.jayway.restassured.path.json.JsonPath.from;

不走运。用我正在使用的Json路径版本更新了这个问题。谢谢。不幸的是它没有
parse
read
方法。我更新了我的答案。试着对你即将发布的帖子更加具体:)也看看这里,谢谢你的解决方案<代码>来自(response).getList(“sessionQuestions.findAll{it.questionId=='1002'}.id”).toString()在我直接使用rest assured的jsonpath时帮助了我。Jayway的jsonpath与其他的不同,因此会导致更复杂的问题。@CMM这是您非常有用的回答,我使用jsonpath验证响应,感谢您提到此技巧可直接用于jsonPath,如下所示====================>jsonPath pastPartnerUsersListResponseJson=pastPartnerUsersListResponse.getBody().jsonPath();String pendingCcoId=pastPartnerUsersListResponseJson.getList(“data.findAll{it.accessOrder==1}.ccoId”).stream().collect(Collectors.toList()).get(0.toString();我这里有一个基本问题,那是什么,你用的,怎么用的