J'essaie de charger un fichier JSON en utilisant jq
per here . C'est assez simple et cela fonctionne:
$ cat ~/Downloads/json.txt | jq '.name'
"web"
Cependant, je dois affecter le résultat de cette variable à une commande. J'ai essayé de faire ça et ça marche:
$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt
Mais je veux /home/qut/Downloads/web.txt
.
Comment puis-je supprimer les guillemets, c’est-à-dire changer "web"
en web
?
Vous pouvez utiliser la commande tr pour supprimer les guillemets:
my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
Dans le cas particulier de jq
, vous pouvez spécifier que la sortie doit être au format brut :
--raw-output / -r:
With this option, if the filter´s result is a string then it will
be written directly to standard output rather than being formatted
as a JSON string with quotes. This can be useful for making jq fil‐
ters talk to non-JSON-based systems.
Pour illustrer l’utilisation du fichier exemple json.txt
de votre lien :
$ jq '.name' json.txt
"Google"
tandis que
$ jq -r '.name' json.txt
Google
Vous pouvez utiliser eval echo
comme ceci:
my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))
mais ce n'est pas idéal - pourrait facilement causer des bugs et/ou des failles de sécurité.
Plus simple et plus efficace, utilisez la fonction de suppression du préfixe/suffixe natif de Shell:
my_json=$(cat ~/Downloads/json.txt | jq '.name')
temp="${my_json%\"}"
temp="${temp#\"}"
echo "$temp"
Source https://stackoverflow.com/questions/9733338/Shell-script-remove-first-and-last-quote-from-a-variable