Establecer un valor en un json usando jsonPath en karate

Tengo el siguiente archivo Json (Test.json) leído en una variable en 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"
    }
  ]
}

Tengo la intención de cambiar el valor del número de móvil dentro de mi código de karate y usar el Json como mi solicitud con las siguientes líneas

Código de Kárate:

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

La salida de la declaración de impresión no tiene el json actualizado con el número de Mobile.

Alternativamente, también he usado la siguiente línea para configurar la variable, pero esto tampoco funcionó:

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

¿Es esto posible a través del Karate? En caso afirmativo, alguien puede señalarme el lugar donde me estoy equivocando o un enfoque alternativo para lograr mi escenario.

Gracias.

Answer

No puedes usar JsonPath para mutar. Acceda directamente a la ruta o use una map()operación: https://github.com/karatelabs/karate#json-transforms

Este es solo un ejemplo, suponiendo que el JSON está en una variable llamada body. Tómese un tiempo para acostumbrarse a las transformaciones JSON.

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