在嵌套数组 jq 中抓取 n 项

Grab n item in nested array jq

我正在尝试从嵌套的 json 数组中获取 'n' 项。场景是我需要从我的云提供商那里获取新创建的云实例的 IP 地址,以便我可以使用 ansible 执行自动化任务。这是我的云提供商提供的 api 的 json 输出示例。 (出于隐私和安全原因隐藏了详细信息)

[
  {
    "alerts": {
      "cpu": 180,
      "io": 10000,
      "network_in": 10,
      "network_out": 10,
      "transfer_quota": 80
    },
    "backups": {
      "enabled": false,
      "last_successful": null,
      "schedule": {
        "day": null,
        "window": null
      }
    },
    "created": "2022-04",
    "group": "",
    "hypervisor": "kvm",
    "id": 36084613,
    "image": "ubuntu20.04",
    "ipv4": [
      "12.34.56.78",     #<--- Need to grab this public address
      "192.168.x.x"      #<--- and this private address
    ],
    "ipv6": "0000::0000/128",
    "label": "node-1",
    "region": "us",
    "specs": {
      "disk": 81920,
      "memory": 4096,
      "transfer": 4000,
      "vcpus": 2
    },
    "status": "running",
    "tags": [],
    "type": "standard",
    "updated": "2022-04",
    "watchdog_enabled": true
  }
]

我需要获取 public IP 地址才能将节点添加到清单文件。到目前为止,我已经设法得到以下内容:

$ cat json.json | jq -r '.[0].ipv4'
[
  "12.34.56.78",
  "192.168.x.x"
]

我可以通过重新输入 jq 来获得我想要的东西,但我觉得必须有一种更优雅的方式来做到这一点。

$ cat json.json | jq -r '.[0].ipv4' | jq -r '.[0]'
12.34.56.78

$ cat json.json | jq -r '.[0].ipv4' | jq -r '.[1]'
192.168.x.x

第一次在 Whosebug 上发帖,所以如果有人已经在另一个线程上回答了这个问题,我提前道歉。我环顾四周,找不到我要找的东西。谢谢!

看来你想要:

jq -r '.[0].ipv4[]'

或者也许:

jq -r '.[].ipv4[]'