2

我正在使用放心为我的微服务编写集成测试。我有一个这样的 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

我在这里做错了什么?非常感谢任何帮助。

4

1 回答 1

4

您使用哪个版本的 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;
于 2017-12-08T12:53:12.267 回答