Jq解析:根据条件从对象列表中选择对象

时间:2015-11-30 09:08:49

标签: jq

我有这样的JSON。

{
  "servers": [
    {
      "id": "1",
      "addresses": {
        "services_z1": [
          {
            "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:bc:db:7d",
            "addr": "10.3.3.18",
            "version": 4,
            "OS-EXT-IPS:type": "fixed"
          }
        ]
      }

    },

    {
      "id": "2",
      "addresses": {
        "services_z1": [
          {
            "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:bc:db:7d",
            "addr": "10.3.3.19",
            "version": 4,
            "OS-EXT-IPS:type": "fixed"
          }
        ]
      }

    },

    {
      "id": "3",
      "addresses": {
        "services_z1": [
          {
            "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:bc:db:7d",
            "addr": "10.3.3.20",
            "version": 4,
            "OS-EXT-IPS:type": "fixed"
          }
        ]
      }

    },

    {
      "id": "4",
      "addresses": {
        "services_z1": [
          {
            "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:bc:db:7d",
            "addr": "10.3.3.21",
            "version": 4,
            "OS-EXT-IPS:type": "fixed"
          }
        ]
      }

    }

    ]

}

我正在尝试查找addr值为10.3.3.18的服务器ID。我怎样才能做到这一点?

我知道它会像jq'.servers [] |选择(某些标准)'

但我不能形成这个标准。

任何指针都会有很大的帮助。

1 个答案:

答案 0 :(得分:3)

您需要以下内容:

jq '.servers[]|select(.addresses.services_z1[].addr=="10.3.3.18")|.id'

这表示查看所有服务器,匹配那些具有.addresses.services_z1 [] .addr ==" 10.3.3.18",然后打印这些服务器的ID。