¿Cómo puedo actualizar un solo valor en un documento json usando jq?


Appologies si he pasado por alto algo muy obvio; acabo de encontrar jq y estoy tratando de usarlo para actualizar un valor JSON sin afectar los datos circundantes.

Me gustaría canalizar un resultado curl a jq, actualizar un valor y canalizar el JSON actualizado a un curl -X PUT. Algo así como

curl http://example.com/shipping.json | jq '.' field: value | curl -X PUT http://example.com/shipping.json

Hasta ahora he hackeado juntos usando sed, pero después de mirar algunos ejemplos del operador |= en jq Estoy seguro de que no los necesito.

Aquí hay un JSON ejemplo sample ¿cómo usaría jq para establecer "local": false, conservando el resto del JSON?

{
  "shipping": {
    "local": true,
    "us": true,
    "us_rate": {
      "amount": "0.00",
      "currency": "USD",
      "symbol": "$"
    }
  }
}
 41
Author: STW, 2015-06-24

1 answers

Se establecen los valores de un objeto utilizando el operador =. |= por otro lado, se utiliza para actualizar un valor. Es una diferencia sutil pero importante. El contexto de los filtros cambia.

Ya que está configurando una propiedad a un valor constante, use el operador =.

.shipping.local = false

Solo tenga en cuenta que cuando se establece un valor a una propiedad, no necesariamente tiene que existir. Puede agregar nuevos valores fácilmente de esta manera.

.shipping.local = false | .shipping.canada = false | .shipping.mexico = true
 60
Author: Jeff Mercado,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-24 21:44:01