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

Setting a value into a json using jsonPath in karate

我将以下 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

打印语句的输出没有 json 更新为手机号码。

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

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

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

谢谢。

您不能使用 JsonPath 进行变异。直接访问路径或使用map()操作:https://github.com/karatelabs/karate#json-transforms

这只是一个例子,假设 JSON 在一个名为 body 的变量中。花点时间习惯 JSON 转换。

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