it-swarm.com.de

Verwenden von jq zum Abrufen des Schlüsselwerts aus der Ausgabe von json

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

8
meallhour

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.
11
Ruslan Osmanov

Sie möchten das Repository-Array betrachten, anstatt die Eingabe als Array zu behandeln:

$ jq -r '.repositories[].name' file
rhel6.6
rhel7
12
that other guy

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
0
jq170727