2016-06-28 9 views
1

Hier ist ein JSON Beispiel:jq Filter: Extrahieren Elternwerte + eindeutige Werte von Array

[ 
    { 
    "AAA": "111", 
    "images": [ 
     { 
     "BBB": "some_value1" 
     }, 
     { 
     "BBB": "some_value2" 
     }, 
     { 
     "BBB": "some_value3" 
     } 
    ] 
    }, 
    { 
    "AAA": "222", 
    "images": [ 
     { 
     "BBB": "some_value4" 
     }, 
     { 
     "BBB": "some_value5" 
     }, 
     { 
     "BBB": "some_value6" 
     } 
    ] 
    } 
] 

Der folgende Filter fast löst die erforderliche Aufgabe:

cat EXAMPLE.json | jq -r ".[] | [.AAA, .images[].BBB] | @csv" 

Dennoch gibt es nur das Ergebnis dies wie:

"111","some_value1","some_value2","some_value3" 
"222","some_value4","some_value5","some_value6" 

Die Frage ist: wie meiner jq filt zu ändern äh, um folgendes Ergebnis zu erhalten:

"111","some_value1" 
"111","some_value2" 
"111","some_value3" 
"222","some_value4" 
"222","some_value5" 
"222","some_value6" 

Schätzen Sie jede Hilfe.

Antwort

1

Sie können dies tun:

$ jq -r '.[] | [.AAA] + (.images[] | [.BBB]) | @csv' EXAMPLE.json 
+0

Es funktionierte, ich danke Ihnen so sehr. – fkrents

+1

Jeffs Antwort ist völlig richtig, aber Sie können diese eine natürlichere Progression von OPs "bestem Versuch" bis zur endgültigen Lösung finden: 'jq -r '. [] | .images [] als $ image | [.AAA, $ image.BBB] | @ csv'' –

0

Eine leichte Modifikation von fkrents ersten Versuch:

.[] | [.AAA, .images[].BBB] | @csv 

zu dieser Lösung führt:

.[] | .AAA as $a | .images[].BBB | [$a, .] | @csv 
Verwandte Themen