如何在 JQ 中跳过迭代
How to skip iteration in JQ
{ "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
如果 1st continue 为 false,我想跳过
所需输出:
{"cpu":3}
使用map(select(...))
:
jq '.items|map(select(.metadata.name == "127.0.0.1"))|.[].status.capacity' items
{
"cpu": 3
}
@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 }
{ "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
如果 1st continue 为 false,我想跳过
所需输出:
{"cpu":3}
使用map(select(...))
:
jq '.items|map(select(.metadata.name == "127.0.0.1"))|.[].status.capacity' items
{
"cpu": 3
}
@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 }