在空手道中使用 jsonPath 将值设置为 json

Setting a value into a json using jsonPath in karate

提问人:Chethan Swaroop 提问时间:1/15/2022 更新时间:1/15/2022 访问量:1380

问:

我将下面的 Json 文件(Test.json)读入空手道中的变量

TestInput.json:

{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  },
  "phoneNumbers": [
    {
      "type"  : "Mobile",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}

我打算更改我的空手道代码中手机号码的值,并使用 Json 作为我的请求,并带有以下行

空手道代码:

 * def reqJson = read('TestInput.json')
 * karate.set('reqJson','$.phoneNumbers[?(@.type=="Mobile")].number',"999999999")
 Then print reqJson

print 语句的输出没有使用 Mobile 的数字更新 json。

或者,我也使用以下行来设置变量,但这也没有用:

* set reqJson.phoneNumbers[?(@.type=="Mobile")].number = "99999999"

这可以通过空手道实现吗?如果是,有人可以指出我出错的地方或实现我的场景的替代方法。

谢谢。

JSON 空手道 JSONPath

评论


答:

1赞 Peter Thomas 1/15/2022 #1

不能使用 JsonPath 进行更改。直接访问路径或使用操作:https://github.com/karatelabs/karate#json-transformsmap()

这只是一个示例,假设 JSON 位于名为 的变量中。花一些时间来适应 JSON 转换。body

* body.phoneNumbers = body.phoneNumbers.map(x => { x.number = '999'; return x })