2016-11-23 4 views
1
{ "items":[ 
    { 
     "metadata":{"name":"127.0.0.1"}, 
     "status":{ 
     "capacity":{"cpu":3} 
     } 
    }, 
    { 
     "metadata":{"name":"127.0.0.2"}, 
     "status":{ 
     "capacity":{"cpu":8} 
     } 
    } ] } 

Я хочу сделать следующее:Как пропустить итерации в JQ

.items[] | if .metadata.name=="127.0.0.1" then {cpu: .status.capacity.cpu} else <<I want to skip>> end 

Я хочу пропустить, если первый по-прежнему является ложным

Обязательный выход:

{"cpu":3} 
+0

Можете ли вы это сделать? Человек, который дает downvote – aerokite

ответ

1

@ aerofile-kite - Ваш первый инстинкт прав. Нет необходимости использовать map, и в вашем случае, вероятно, более эффективно не использовать его. После вашей линии мысли, вы могли бы написать:

.items[] 
| if .metadata.name=="127.0.0.1" 
    then {cpu: .status.capacity.cpu} 
    else empty 
    end 

или более лаконично:

.items[] 
    | select(.metadata.name=="127.0.0.1") 
    | { cpu: .status.capacity.cpu } 
+0

Хорошо. Ваш ответ решает мою задачу пропустить другую часть – aerokite

1

Использование map(select(...)):

jq '.items|map(select(.metadata.name == "127.0.0.1"))|.[].status.capacity' items 
{ 
    "cpu": 3 
} 
+0

Спасибо. Я искал это – aerokite