RestAssured - JsonPath 在给定过滤条件的情况下,从对象数组中过滤匹配对象的属性
RestAssured - JsonPath filter a matching Object's properties from an array of objects, given a filter criteria
我正在使用放心为我的微服务编写集成测试。我有一个从它返回的 Json 有效负载。
{
"sessionQuestions":[
{
"id":1272,
"sessionId":1146,
"questionId":"1002",
},
{
"id":1273,
"sessionId":1146,
"questionId":"1004",
}
]
}
我需要找到给定问题 ID 值的会话问题的 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
我这里做错了什么?非常感谢任何帮助。
您使用哪个版本的 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-path-2.9.0),你必须这样做:
from(response).getList("sessionQuestions.findAll { it.questionId=='1002' }.id").toString();
你必须像这样导入:
import static com.jayway.restassured.path.json.JsonPath.from;
我正在使用放心为我的微服务编写集成测试。我有一个从它返回的 Json 有效负载。
{
"sessionQuestions":[
{
"id":1272,
"sessionId":1146,
"questionId":"1002",
},
{
"id":1273,
"sessionId":1146,
"questionId":"1004",
}
]
}
我需要找到给定问题 ID 值的会话问题的 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
我这里做错了什么?非常感谢任何帮助。
您使用哪个版本的 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-path-2.9.0),你必须这样做:
from(response).getList("sessionQuestions.findAll { it.questionId=='1002' }.id").toString();
你必须像这样导入:
import static com.jayway.restassured.path.json.JsonPath.from;