2016-11-23 85 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