2017-08-11 16 views
0

与えられた入力を使用して、入力の一部のみ:フィルターのように選択

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

がどのように私はJSON構造のすべてを保持するが、select()を使用して子供たちのいくつかをフィルタリングするjqを使用することができます。例えば、私は国GBと子だけを返すように望んでいた場合、私は次の出力が期待される:

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

私は子供が欲しい場合は、これは.children[] | select(.properties.country == "GB")と簡単ですが、JSONの残りの部分を保持しません。

答えて

2

鍵は|=です。現在のケースでは、次のパターンを使用できます。

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

ありがとうございます!私はしばしばjqのドキュメントの周りに頭を抱えて苦労します。 – cmbuckley