json - Karate ——JSON 响应解析

标签 json karate

以下是我在访问特定网络服务时收到的 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' 因为这将在下次更改。

我有两个问题:

  1. 如何将响应传递给 java 代码并获取具有 sId == '0003' 的数组索引,以便我可以使用该索引进行验证?
  2. 如何将变量值作为数组索引传递给响应?

下面的代码无效。

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

More about JSON path

online JSON path evaluator

karate doc refernce

关于json - Karate ——JSON 响应解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54012378/

相关文章:

android - Moshi 适配器跳过 List<T> 中的坏对象

ruby - Make error installing ruby​​ gem json v1.8.3 : BFD (GNU Binutils for Debian) 2. 22 内部错误

javascript - jQuery 数据表未捕获类型错误 : Cannot read property 'length' of undefined

cucumber - 如何读取 Karate 框架功能文件中的响应 header value ?

json - 在 jq 中作为变量赋值

jquery - 更新 Twitter 预输入的每个按键上的 JSON

graphql - 将片段从 GraphQL 文件导入到另一个 GraphQL 文件不起作用

Karate - 设置全局请求 header

java - 并行运行 Karate 测试的方式 - 问题

gradle - 通过 gradle 命令行运行单个 Runner 类 - Karate