以下是我在访问特定网络服务时收到的 JSON 响应:
[
{
"sId" : "0001",
"sName" : "abc1",
"sPlace" : "abc11"
}, {
"sId" : "0002",
"sName" : "abc2",
"sPlace" : "abc12"
}, {
"sId" : "0003",
"sName" : "abc3",
"sPlace" : "abc13"
}, {
"sId" : "0004",
"sName" : "abc4",
"sPlace" : "abc14"
}
]
我不知道哪个索引有我的期望值(我需要在确定哪个有 sId == '0003'
之后验证多个值),这是动态的。不想使用硬编码值。
并匹配 response.[3].sId == '0003'
因为这将在下次更改。
我有两个问题:
- 如何将响应传递给 java 代码并获取具有
sId == '0003'
的数组索引,以便我可以使用该索引进行验证? - 如何将变量值作为数组索引传递给响应?
下面的代码无效。
def ind = Java.type('karate.Utility.FindIndex')
response.['#ind'].sId == '0003'
最佳答案
Karate 使用 json-path 允许写入条件以从 JSON 读取数据。
例子:
* def sId = "0003"
* def sValue = karate.jsonPath(response, "$[?(@.sId == '" + sId + "')]")
* match sValue[0] == {"sId" : "0003","sName" : "abc3","sPlace" : "abc13"}
现在,如果响应 JSON 数组中的 sId 中存在匹配项,则将返回所有此类匹配项。
No need to do * match sValue[0].sId == "0003" as this is your filter criteria
关于json - Karate ——JSON 响应解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54012378/