web-dev-qa-db-fra.com

Modifier une valeur-clé dans un json à l'aide de jq

J'ai un json dans lequel je veux modifier une valeur particulière mais le terminal affiche toujours le json avec la valeur modifiée mais il ne change pas réellement la valeur dans le fichier particulier. Échantillon json:

{
   name: 'abcd',
   age: 30,
   address: 'abc'
}

Je souhaite modifier la valeur de l'adresse dans le fichier lui-même, mais je n'ai pas pu le faire jusqu'à présent. J'ai essayé d'utiliser:

jq '.address = "abcde"' test.json

mais ça n'a pas marché. Aucune suggestion?

26
wolfsbane

AFAIK jq ne supporte pas l'édition sur place, vous devez donc tout d'abord rediriger vers un fichier temporaire, puis remplacer votre fichier d'origine par celui-ci, ou utiliser l'utilitaire sponge du paquetage moreutils, comme celui-ci:

jq '.address = "abcde"' test.json|sponge test.json

Il existe d'autres techniques pour "rediriger vers le même fichier", comme enregistrer votre sortie dans une variable e.t.c. "Unix & Linux StackExchange" est un bon point de départ si vous voulez en savoir plus à ce sujet.

37
zeppelin

Utilisez un fichier temporaire. c'est ce que tout programme qui prétend effectuer une édition sur place fait.

tmp=$(mktemp)
jq '.address = "abcde"' test.json > "$tmp" && mv "$tmp" test.json
47
chepner