2017-09-12 3 views
0

How do I update a single value in a json document using jq? n'a pas la réponse à cette question.Comment définir une propriété d'un fichier JSON et substituons dans une commande à l'aide JQ

  1. Lire le fichier json.
  2. Mettez à jour la valeur.
  3. Remplacez le fichier.

une commande Expecting en ligne utilisant jq

Supposons que j'ai fichier suivant JSON.

{ 
    "name": "app", 
    "value": "one", 
    ... 
} 

Je veux mettre à jour le champ de valeur à « deux ». Donc, résultant fichier JSON devrait ressembler à

{ 
    "name": "app", 
    "value": "two", 
    ... 
} 

Quelle est la plus simple commande bash et fenêtres commande bat pour cela.

Répondre

0

Apparemment, je ne peux pas commenter, mais cette réponse est plus comme un commentaire.

Extrait du manuel: Mise à jour affectation: | =

Ceci est l'opérateur « mise à jour » « | = ». Il prend un filtre sur le côté droit et travaille sur la nouvelle valeur pour la propriété de. étant attribué à en exécutant l'ancienne valeur à travers cette expression. Par exemple, (.foo, .bar) | =. + 1 construira un objet avec le champ "foo" réglé sur "foo" plus 1 de l'entrée, et le champ "barre" sur "barre" de l'entrée plus 1 .

Le côté gauche peut être une expression de chemin d'accès général; voir le chemin().

Notez que le côté gauche de « | = » se réfère à une valeur .. Ainsi $ var.foo | =. + 1 ne fonctionnera pas comme prévu ($ var.foo n'est pas une expression de chemin valide ou utile.); utilise $ var | .foo | =. + 1 à la place.

Si le côté droit ne renvoie aucune valeur (c'est-à-dire, vide), alors le chemin du côté gauche sera supprimé, comme avec del (chemin).

Si le côté droit génère plusieurs valeurs, seule la première sera utilisée (NOTE DE COMPATIBILITÉ: dans jq 1.5 et versions antérieures, il était utilisé uniquement le dernier).

Salutations

1

Voici une démonstration d'une solution qui utilise sponge

bash-3.2$ cat data.json 
{ 
    "name": "app", 
    "value": "one" 
} 

bash-3.2$ jq -M '.value="two"' < data.json | sponge data.json 

bash-3.2$ cat data.json 
{ 
    "name": "app", 
    "value": "two" 
} 
+0

éponge: command not found. le fichier d'écrasement est un fichier. – sith

+0

éponge peut être trouvé dans [moreutils] (http://joeyh.name/code/moreutils/). Il ya une version de Windows [ici] (https://github.com/zetamatta/sponge) – jq170727

+0

pouvez-vous me donner la commande avec le remplacement du fichier en utilisant ">" – sith