Toutes mes excuses si j'ai oublié quelque chose de très évident; Je viens de le trouver jq
et j'essaie de l'utiliser pour mettre à jour une valeur JSON sans affecter les données environnantes.
J'aimerais intégrer un curl
résultat jq
, mettre à jour une valeur et diriger le JSON mis à jour vers un fichier 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 de l' |=
opérateur dans, jq
je suis sûr que je n'en ai pas 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": "$"
}
}
}
"
, par exemple.shipping.local = "new place"
. Donc, toute la commande seracurl http://example.com/shipping.json | jq '.shipping.local = "new place"'
. Sinon, vous obtiendrez des erreurs étranges.false
. Les valeurs ne doivent pas nécessairement être des chaînes.false
. Qu'est-ce qui ne va pas?Mettre à jour une valeur (définit .foo.bar sur "nouvelle valeur"):
Mettez à jour une valeur à l'aide d'une variable (définit .foo.bar sur "hello"):
la source
une fonction similaire à l'opérateur | = est map. map conviendra pour éviter l'exigence d'un filtre précédent pour le tableau ...
imaginez que vos données sont un tableau (très courant pour cet exemple)
il est donc nécessaire de considérer le tableau dans le code comme:
ou pour utiliser la fonction de carte conçue pour fonctionner dans chaque élément du tableau comme
Observation
Pour ceux qui apprennent, vous avez également fait des erreurs dans l'utilisation de jq, considérez simplement qu'il "lit" le 1er paramètre comme programme, donc toutes les commandes souhaitées doivent être incluses dans la toute première chaîne après l'appel du programme.
la source