2017-09-06 9 views
0

私は次のようなJSON入力があります。jqを使用してJSONオブジェクトの配列をフィルタリングする方法は?

{ 
    "zk_kafka": [ 
    { 
     "InstanceType": "t2.medium", 
     "zkMemory": "16", 
     "kafkaMemory": "8" 
    }, 
    { 
     "InstanceType": "t2.small", 
     "zkMemory": "8", 
     "kafkaMemory": "4" 
    } 
    ], 
    "es_hdfs": [ 
    { 
     "InstanceType": "t2.medium", 
     "esMemory": "16", 
     "hdfsMemory": "8" 
    }, 
    { 
     "InstanceType": "t2.small", 
     "esMemory": "8", 
     "hdfsMemory": "4" 
    } 
    ] 
} 

まず私は、プロパティ名でアレイを選択します。そして、配列のオブジェクトをInstanceTypeの値で選択したいと思います。

jq .zk_kafka 

しかし、私はしてオブジェクトの配列をフィルタリングする方法がわからない:私は配列を選択する方法を知っている

{ 
    "InstanceType": "t2.medium", 
    "zkMemory": "16", 
    "kafkaMemory": "8" 
} 

:プロパティzk_kafkaと値t2.mediumため

例プロパティ値。

jq '.zk_kafka | .[] | select(.InstanceType == "t2.medium")' 

がクエリーに引数を渡す--argオプションを使用します。

+2

「XY」の問題ではなく、入力と期待される出力を表示します – Inian

+0

今回私はあなたに質問を書いたが、次回はhttps://stackoverflow.com/help/mcveを読んでください – ceving

答えて

0

jqselectフィルタを使用してください。

jq --arg instance "t2.medium" '.zk_kafka | .[] | select(.InstanceType == $instance)' 

jqmanualtutorialcookbookを持っています。

+0

ねえ、これはそうではありません作業 –

+0

引用符は正常に動作します。しかし、あなたは 'sed'の要求に従って正規表現をエスケープする必要があることに留意してください。 – ceving

+0

{ \t \t \t "InstanceType": "t2.medium"、 \t \t \t "zkMemory": "16"、 \t \t \t "kafkaMemory": "8" \t \t}、 \t \t { \t \t \t "InstanceType": "t2.small"、 \t \t \t "zkMemory": "8"、 \t \t私は手動でt2.mediumを与え、それは働いていました。しかし、それは私にブロックを与え、t2.mediumは変数から来ます。変数から受け入れません。 –

関連する問題