在嵌套数组 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[]'
我正在尝试从嵌套的 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[]'