2017-08-11 2 views
0

Bei Eingabe wie folgt aus:Filter nur einen Teil der Eingabe mit ausgewählten

{ 
    "type": "collection", 
    "foo": "bar", 
    "children": [ 
    { 
     "properties": { 
     "country": "GB" 
     }, 
     "data": "..." 
    }, 
    { 
     "properties": { 
     "country": "PL" 
     }, 
     "data": "..." 
    } 
    ] 
} 

Wie kann ich jq verwenden alle die JSON-Struktur zu behalten, aber select() mit einigen der Kinder herauszufiltern. Zum Beispiel, wenn ich nur Kinder mit Land GB zurückkehren wollte, würde ich die folgende Ausgabe erwarten:

{ 
    "type": "collection", 
    "foo": "bar", 
    "children": [ 
    { 
     "properties": { 
     "country": "GB" 
     }, 
     "data": "..." 
    } 
    ] 
} 

Wenn ich will nur die Kinder, dann ist dies mit .children[] | select(.properties.country == "GB") einfach, aber nicht dem Rest des JSON zurückzubehält .

Antwort

2

Der Schlüssel ist |= zu verwenden. Im vorliegenden Fall könnten Sie das folgende Muster verwenden:

.children |= map(select(...)) 
+0

Vielen Dank! Ich habe oft Schwierigkeiten, den Kopf in die jq-Dokumentation zu bekommen. – cmbuckley

Verwandte Themen