curl http://testhost.test.com:8080/application/app/version | jq '.version' | jq '.[]'
Der obige Befehl gibt nur die folgenden Werte aus:
"[email protected]"
"2323"
"test"
"02-03-2014-13:41"
"application"
Wie kann ich stattdessen die Schlüsselnamen wie folgt erhalten:
email
versionID
context
date
versionName
jq
?Antworten:
Sie können verwenden:
UPDATE: So erstellen Sie ein BASH-Array mit den folgenden Schlüsseln:
Verwenden von BASH 4+:
Bei älteren BASH können Sie Folgendes tun:
Dann drucken Sie es aus:
quelle
mapfile -t arr < <(jq -r 'keys[]' ms.json)
anstelle dieser hässlichen Prozessersetzung, um Probleme mit Leerzeichen in den Schlüsseln zu vermeiden.arr=(); while IFS='' read -r line; do arr+=("$line"); done < <(...)
.keys_unsorted
, um die Schlüssel in der Reihenfolge der Dokumente zu erhalten.Sie müssen verwenden
jq 'keys[]'
. Beispielsweise:Gibt eine zeilengetrennte Liste aus:
quelle
In Kombination mit der obigen Antwort möchten Sie jq nach der Rohausgabe fragen, daher sollte Ihr letzter Filter z.
Von jq help:
quelle
bash
Skript-Gotcha. Wenn Sie nichts angeben, erhalten-r
Sie eine Zeichenfolge in Anführungszeichen, die auf dem Bildschirm gut aussieht, aber normalerweise nicht in Anführungszeichen eingebettet werden soll.So drucken Sie Schlüssel in einer Zeile als CSV:
Ausgabe:
Der Vollständigkeit halber ... um Werte in einer Zeile als CSV zu drucken:
Ausgabe:
quelle
echo '{"ab": 1, "cd": 2}' | jq -r 'keys[]'
druckt alle Schlüssel einen Schlüssel pro Zeile ohne Anführungszeichen.quelle
So erhalten Sie die Schlüssel auf einem tieferen Knoten in einem JSON:
quelle
Hier ist eine andere Möglichkeit, ein Bash-Array mit dem Beispiel-JSON zu erhalten, das @anubhava in seiner Antwort angegeben hat:
quelle