Ich habe eine Datei, die wie folgt aussieht:
{
"repositories": [
{
"id": "156c48fc-f208-43e8-a631-4d12deb89fa4",
"namespace": "rhel12",
"namespaceType": "organization",
"name": "rhel6.6",
"shortDescription": "",
"visibility": "public"
},
{
"id": "f359b5d2-cb3a-4bb3-8aff-d879d51f1a04",
"namespace": "rhel12",
"namespaceType": "organization",
"name": "rhel7",
"shortDescription": "",
"visibility": "public"
}
]
}
Ich möchte mit jedem von ihnen nur einen Namen in einer neuen Zeile erhalten, damit ich while read -r line
..__ verwenden kann. Ich brauche nur
rhel6.6
rhel7
Ich verwende jq wie folgt, was nicht zu funktionieren scheint:
jq -r '.[].name'
Bitte schlagen Sie hier die korrekte Verwendung von jq vor
Sie müssen Filter mit dem Operator |
kombinieren:
$ jq -r '.[] | .[] | .name' test.json
rhel6.6
rhel7
Das erste .[]
ruft repositories
Array ab. Der nächste .[]
ruft alle Elemente des repositories
-Arrays ab. Schließlich extrahiert .name
Eigenschaften aus den Feldelementen (Objekten).
Beachten Sie, dass der erste .[]
für ein Objekt funktioniert, da es sich um eine dokumentierte Funktion handelt:
.[]
If you use the .[index] syntax, but omit the index entirely, it
will return all of the elements of an array...
You can also use this on an object, and it will return all the
values of the object.
Sie möchten das Repository-Array betrachten, anstatt die Eingabe als Array zu behandeln:
$ jq -r '.repositories[].name' file
rhel6.6
rhel7
Hier ist eine andere Lösung. Anforderungen annehmen
Ich möchte nur Namenwerte mit jeder von ihnen in einer neuen Zeile erhalten, so dass ich die read -r-Zeile verwenden kann.
Können Sie bitte wissen, wie ich die Ausgabe im Format rhel12/rhel6.6 erhalten kann. Mit anderen Worten, ich benötige o/p im Format Namespace/Name
wenn die Daten in data.json
sind, dann der Befehl
jq -M -r '.repositories[] | "\(.namespace)/\(.name)"' data.json
sollte produzieren
rhel12/rhel6.6
rhel12/rhel7