6 votes

Manipuler JSON en bash

J'ai un fichier JSON que je dois mettre à jour une valeur particulière.

{
  "Comment": "comment",
  "test": {
    "enabled": true
  },
  "enabled": true,
  "otherStuff": blah,
  "otherStuff2": blah,
  "otherStuff3": blah,
}

J'aimerais changer la valeur du deuxième "enabled" en false. Avec le parseur JQ, je peux facilement le récupérer avec jq '.enabled', mais je ne suis pas sûr de la meilleure façon de manipuler le JSON.

Le JSON est une réponse que je reçois d'une API et peut changer à l'avenir, je ne peux pas compter sur la ligne ou la valeur avant / après.

14voto

marshally Points 2260

Une expérience rapide:

$ echo '{
  "Comment": "comment",
  "test": {
    "enabled": true
   },
  "enabled": true,
  "otherStuff": "blah",
  "otherStuff2": "blah",
  "otherStuff3": "blah"
}' |
jq '.enabled=false'

{
  "otherStuff3": "blah",
  "otherStuff2": "blah",
  "otherStuff": "blah",
  "enabled": false,
  "test": {
    "enabled": true
  },
  "Comment": "comment"
}

1voto

msanford Points 1427

J'interprète la question comme étant "dans le shell" et pas nécessairement comme "en utilisant seulement des fonctions bash intégrées".

Essayez jsawk, qui permet la manipulation et est scriptable, bien qu'il dépende de js.

Si tout ce que vous voulez faire est lire une clé (unique) de la réponse JSON, vous pourriez (adapté de Brendan OConnor):

curl  | grep -Po '"keyname":.*?[^\\]",'`

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X