jq解析:根据条件从对象列表中选择一个对象

Jq parsing : Selecting an object from a list of objects based on criteria

我有一个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"
          }
        ]
      }

    }

    ]

}

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

我知道它会像 jq '.servers[] | select(一些条件)'

但我无法形成该标准。

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

您想要如下内容:

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

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