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

あなたがこれを行うことができますか?下降を与える人 – 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

Ok。あなたの答えは、他の部分をスキップするための私の探求を解決する – aerokite

1

使用map(select(...))

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

ありがとう。私はこれを探していた – aerokite

関連する問題