2016-09-30 4 views
3

Ich habe eine Datei abzurufen, die wie unten aussieht:jq Mit Schlüsselwert von json Ausgang

{ 
    "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 nur Name Werte mit jedem von ihnen in einer neuen Zeile zu bekommen, so dass ich while read -r line verwenden können. Ich brauche nur

rhel6.6 
rhel7 

ich jq bin mit wie folgt, die nicht zu funktionieren scheint:

jq -r '.[].name' 

Bitte korrekte Verwendung von jq vorschlagen hier

Antwort

4

Sie müssen Filter mit Hilfe kombinieren von | Betreiber:

$ jq -r '.[] | .[] | .name' test.json 
rhel6.6 
rhel7 

Die erste .[] ruft repositories Array ab. Der nächste .[] ruft alle Elemente des Arrays repositories ab. Schließlich extrahiert .name Eigenschaften aus den Array-Elementen (Objekten).

Hinweis, die ersten .[] Werke Objekt, weil es ein dokumentiertes Merkmal:

.[] 
    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. 
+0

dank für Ihre Antwort erzeugen. Kannst du bitte, wie kann ich Ausgabe im Format "Rhel12/Rhel6.6" mit anderen Worten, ich brauche o/p im Format 'namespace/name' – meallhour

+0

@meallhour,' jq -r '. [] | . [] | [.namespace, .name] | beitreten ("/") "test.json" –

6

Sie an der Repositories Array aussehen wollen, anstatt der Behandlung der Eingabe als Array:

$ jq -r '.repositories[].name' file 
rhel6.6 
rhel7 
+0

danke für Ihre Antwort. Können Sie bitte, wie kann ich Ausgabe im Format "Rhel12/Rhel6.6" mit anderen Worten, ich brauche o/p im Format 'namespace/name' – meallhour

+2

Bitte neue Fragen separat zu stellen. –

0

Hier ist eine andere Lösung. Angenommen, die Anforderungen

Ich möchte nur Namen Werte mit jedem von ihnen in einer neuen Zeile, so dass ich während Lese-r Zeile verwenden kann.

Können Sie bitte, wie kann ich Ausgabe im Format rhel12/rhel6.6 Mit anderen Worten, ich brauche o/p im Format Namensraum/namen

, wenn die Daten in data.json ist dann der Befehl

jq -M -r '.repositories[] | "\(.namespace)/\(.name)"' data.json 

sollte

rhel12/rhel6.6 
rhel12/rhel7