如何在JQ中跳过迭代

时间:2016-11-23 10:44:49

标签: 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

如果第一次继续为假,我想跳过

必需输出:

{"cpu":3}

2 个答案:

答案 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 }