Setting a value into a json using jsonPath in karate

I have the below Json File(Test.json) read into a variable in karate

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"
    }
  ]
}

I intend to change the value of Mobile number within my karate code and use the Json as my request with the following lines

Karate Code:

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

The output of the print statement doesn't have the json updated with the number for Mobile.

Alternatively, I've also used the below line to set the variable, but this hasn't worked either:

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

Is this possible via Karate? If Yes can someone please point me to the place where I'm going wrong or an alternative approach to achieve my scenario.

Thanks.


You can't use JsonPath to mutate. Directly access the path or use a map() operation: https://github.com/karatelabs/karate#json-transforms

This is just one example assuming the JSON is in a variable called body. Take some time to get used to JSON transforms.

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