web-dev-qa-db-fra.com

Comment mettre à jour une valeur unique dans un document JSON à l'aide de jq?

Appologies si j'ai oublié quelque chose de très évident; Je viens de trouver jq et j'essaie de l'utiliser pour mettre à jour une valeur JSON sans affecter les données environnantes.

Je voudrais canaliser un résultat curl dans jq, mettre à jour une valeur et diriger le JSON mis à jour vers un curl -X PUT. Quelque chose comme

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

Jusqu'à présent, je l'ai piraté ensemble en utilisant sed, mais après avoir examiné quelques exemples du |= opérateur dans jq je suis sûr de ne pas en avoir besoin.

Voici un exemple JSON - comment utiliser jq pour définir "local": false, tout en préservant le reste du JSON?

{
  "shipping": {
    "local": true,
    "us": true,
    "us_rate": {
      "amount": "0.00",
      "currency": "USD",
      "symbol": "$"
    }
  }
}
71
STW

Vous définissez les valeurs d'un objet à l'aide de la commande = _ opérateur. |= permet par contre de mettre à jour une valeur. C'est une différence subtile mais importante. Le contexte des filtres change.

Puisque vous définissez une propriété sur une valeur constante, utilisez le = _ opérateur.

.shipping.local = false

Notez simplement que lorsque vous définissez une valeur sur une propriété, celle-ci ne doit pas nécessairement exister. Vous pouvez facilement ajouter de nouvelles valeurs de cette façon.

.shipping.local = false | .shipping.canada = false | .shipping.mexico = true
91
Jeff Mercado