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。
我有一个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。