2016-11-22 5 views
0

私は、次のJSONを持っている:条件付きjqクエリに基づいてフラット出力を取得するにはどうすればよいですか?

[ 
    { 
    "name": "InstanceA", 
    "tags": [ 
     { 
     "key": "environment", 
     "value": "production" 
     }, 
     { 
     "key": "group", 
     "value": "group1" 
     } 
    ] 
    }, 
    { 
    "name": "InstanceB", 
    "tags": [ 
     { 
     "key": "group", 
     "value": "group2" 
     }, 
     { 
     "key": "environment", 
     "value": "staging" 
     } 
    ] 
    } 
] 

私は条件key == 'environment'に基づいてvalueのフラットな出力を取得しようとしています。私はすでにselect(boolean_expression)を試してみましたが、同様に私は、所望の出力を得ることができません。

 
"InstanceA, production" 
"InstanceB, staging" 

jqサポート出力のこの種をしていますか?もしそうなら、それを行う方法?

+0

[JQで複数の条件文を選択する]の可能複製(HTTPに参加しています//stackoverflow.com/questions/40614513/selecting-multiple-conditionals-in-jq) –

+1

あなたはキーと値のペアが 'from_entries'に使われたのと同じデータ構造であることに気付きましたか? –

答えて

1
jq '.[] | .name + ", " + (.tags[] | select(.key == "environment").value)' f.json 
+0

あなたはそれを持っています!ありがとう! –

2

はい。

例えば:

$ jq '.[] | "\(.name), \(.tags | from_entries | .environment)"' input.json 

出力:

"InstanceA, production" 
"InstanceB, staging" 
0

ここでは、を使用したソリューションは、

.[] 
| [.name, (.tags[] | if .key == "environment" then .value else empty end)] 
| join(", ") 
関連する問題