我有这样的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 [] |选择(某些标准)'
但我不能形成这个标准。
任何指针都会有很大的帮助。
答案 0 :(得分:3)
您需要以下内容:
jq '.servers[]|select(.addresses.services_z1[].addr=="10.3.3.18")|.id'
这表示查看所有服务器,匹配那些具有.addresses.services_z1 [] .addr ==" 10.3.3.18",然后打印这些服务器的ID。