空手道-JSON响应解析

时间:2019-01-02 19:56:37

标签: karate

以下是我点击特定Web服务时收到的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'

1 个答案:

答案 0 :(得分:2)

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中存在匹配项,则将返回所有此类匹配项。

  

不需要*匹配sValue [0] .sId ==“ 0003”,因为这是您的过滤器   条件

More about JSON path

online JSON path evaluator

karate doc refernce