{ "items":[
{
"metadata":{"name":"127.0.0.1"},
"status":{
"capacity":{"cpu":3}
}
},
{
"metadata":{"name":"127.0.0.2"},
"status":{
"capacity":{"cpu":8}
}
} ] }
我想做以下事情:
.items[] | if .metadata.name=="127.0.0.1" then {cpu: .status.capacity.cpu} else <<I want to skip>> end
如果第一次继续为假,我想跳过
必需输出:
{"cpu":3}
答案 0 :(得分:1)
使用map(select(...))
:
jq '.items|map(select(.metadata.name == "127.0.0.1"))|.[].status.capacity' items
{
"cpu": 3
}
答案 1 :(得分: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 }