[英]Using `jq` to add key/value to a json file using another json file as a source
已經為此苦苦掙扎了一段時間,但我離解決方案還很近。 我對使用jq
不是很有經驗。
我想從一個 json 文件中獲取值,並在 dict 中的其他值匹配時將它們添加到另一個文件中。 下面的示例文件比解釋更清楚地展示了我想要的東西。
主機.json:
{
"hosts": [
{
"host": "hosta.example.com",
"hostid": "101",
"proxy_hostid": "1"
},
{
"host": "hostb.example.com",
"hostid": "102",
"proxy_hostid": "1"
},
{
"host": "hostc.example.com",
"hostid": "103",
"proxy_hostid": "2"
}
]
}
代理.json:
{
"proxies": [
{
"host": "proxy1.example.com",
"proxyid": "1"
},
{
"host": "proxy2.example.com",
"proxyid": "2"
}
]
}
如果這樣更容易,我還可以使用 proxyid 作為密鑰的上述文件:
{
"proxies": {
"1": {
"host": "proxy1.example.com",
"proxyid": "1"
},
"2": {
"host": "proxy2.example.com",
"proxyid": "2"
}
}
}
使用上面的這些 json 文件(來自 Zabbix API),我想將.proxies[].host
(來自proxies.json
)的值添加為.hosts[].proxy_host
(到hosts.json
)
只有當.hosts[].proxy_hostid
等於.proxies[].proxyid
所需的 output:
{
"hosts": [
{
"host": "hosta.example.com",
"hostid": "101",
"proxy_hostid": "1",
"proxy_host": "proxy1.example.com"
},
{
"host": "hostb.example.com",
"hostid": "102",
"proxy_hostid": "1",
"proxy_host": "proxy1.example.com"
},
{
"host": "hostc.example.com",
"hostid": "103",
"proxy_hostid": "2",
"proxy_host": "proxy2.example.com"
}
]
}
我已經嘗試了許多不同的方法,並且認為我需要使用jq -s
或jq --slurpfile
,但是我已經遇到了很多死胡同並且找不到解決方案。
jq 'input as $p | map(.[].proxy_host = $p.proxies[].proxyid)' hosts.json proxies.json
我想我也需要這樣的東西,但不知道如何使用它。
if.hosts[].proxy_hostid ==.proxies[].proxyid then.hosts[].proxy_host =.proxies[].host else empty end'
我發現了這些問題,但它們沒有幫助:(
使用您的proxies.json
的替代版本確實更容易。 您只需將代理存儲在變量中作為參考,並在更新主機時從中檢索代理主機。
jq 'input as { $proxies } | .hosts[] |= . + { proxy_host: $proxies[.proxy_hostid].host }' hosts.json proxies.json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.