如何在 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 }