[英]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.