2017-12-08 21 views
0

나머지를 사용하여 내 마이크로 서비스에 통합 테스트를 작성하고 있습니다. 나는 Json 페이로드를 가지고 있는데, 이것으로부터 리턴된다.RestAssured - JsonPath는 필터 조건이 주어지면 객체 배열에서 일치하는 객체의 속성을 필터링합니다.

{ 
    "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) 

나는 잘 작동이 온라인 evaluator에 같은 JSON 경로 식을 시도했다. 나는 사용하고있다 json-path-2.9.0.jar

내가 뭘 잘못하고있는거야? 어떤 도움이라도 대단히 감사합니다.

답변

1

어떤 버전의 JsonPath를 사용하십니까? 나는 this을 사용합니다.

그리고 당신의 사건에 대한 작동 코드

는 다음과 같습니다

JsonPath.parse(response).read("$.sessionQuestions[?(@.questionId=='1002')].id").toString(); 

그리고이 JSON으로 시도 :

{ 
    "sessionQuestions":[ 
     { 
     "id":1272, 
     "sessionId":1146, 
     "questionId":"1002" 
     }, 
     { 
     "id":1273, 
     "sessionId":1146, 
     "questionId":"1004" 
     } 
    ] 
} 

편집 :이 의존성을 사용하는 경우 (JSON 경로-2.9.0), 당신은 이런 식으로 할 필요가 :

from(response).getList("sessionQuestions.findAll { it.questionId=='1002' }.id").toString(); 

을하고이 같은에서 가져 있습니다

import static com.jayway.restassured.path.json.JsonPath.from; 
+0

행운을 빈다. 내가 사용하고있는 Json 경로 버전으로 질문을 업데이트했습니다. 감사. –

+0

불행히도'parse'와'read' 메소드가 없습니다. –

+0

답을 업데이트했습니다. 귀하의 다가오는 게시물에 좀 더 구체적으로 노력하십시오 :) 또한 여기를보십시오 https://github.com/rest-assured/rest-assured/wiki/Usage – ddarellis