Ich versuche, eine JSON-Datei mit jq
per zu ladenHier. Es ist ganz einfach und funktioniert so:
$ cat ~/Downloads/json.txt | jq '.name'
"web"
Ich muss jedoch die Ausgabe dieser Variable einem Befehl zuweisen. Ich habe versucht, dies zu tun, und das funktioniert:
$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt
Aber ich möchte /home/qut/Downloads/web.txt
.
Wie entferne ich die Anführungszeichen, d. h. ändere sie "web"
in web
?
Antwort1
Du kannst den ... benutzentrBefehl zum Entfernen der Anführungszeichen:
my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
Antwort2
Im speziellen Fall von jq
können Sie angeben, dass die Ausgabe in erfolgen sollrohFormat:
--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.
Zur Veranschaulichung verwenden Sie die Beispieldatei json.txt
vonDein Link:
$ jq '.name' json.txt
"Google"
wohingegen
$ jq -r '.name' json.txt
Google
Antwort3
Es geht einfacher und effizienter, indem Sie die native Funktion zum Entfernen von Präfixen und Suffixen der Shell verwenden:
my_json=$(cat ~/Downloads/json.txt | jq '.name')
temp="${my_json%\"}"
temp="${temp#\"}"
echo "$temp"
Quellehttps://stackoverflow.com/questions/9733338/shell-script-remove-first-and-last-quote-from-a-variable
Antwort4
Sie könnten eval echo
es wie folgt verwenden:
my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))
Dies ist jedoch nicht ideal und könnte leicht zu Fehlern und/oder Sicherheitsmängeln führen.