gpt4 book ai didi

java - RestAssured - JsonPath 根据给定的过滤条件从对象数组中过滤匹配对象的属性

转载 作者:行者123 更新时间:2023-11-30 06:23:12 24 4
gpt4 key购买 nike

我正在使用放心为我的微服务编写集成测试。我有一个像这样的 Json 有效负载,它是从它返回的。

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

我需要根据 QuestionId 值查找 session 问题的 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 路径表达式 evaluator ,效果很好。我正在使用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;

关于java - RestAssured - JsonPath 根据给定的过滤条件从对象数组中过滤匹配对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47714330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com