2016-11-22 58 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(", ")