2016-11-22 6 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" 
     } 
    ] 
    } 
] 

Я пытаюсь получить плоский вывод value на основе состояния key == 'environment'. Я уже пробовал 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(", ")