如何使用jq将ip.json的值合并到specs.json的新字段中?
用jq合并两个JSON文件的字段实现方案
当然可以用jq工具实现这个需求,以下是具体步骤:
源文件内容
ip.json
{ "host1": "1.1.1.1", "host2": "1.1.1.2", "host3": "1.1.1.3" }
specs.json
{ "host1": { "cores": 2, "memory": 4 }, "host2": { "cores": 4, "memory": 8 }, "host3": { "cores": 2, "memory": 6 } }
实现命令
直接在终端执行以下jq命令,即可将ip.json中的IP地址作为address字段合并到specs.json的对应主机对象中,并输出到result.json:
jq --argfile ips ip.json 'with_entries(.value += {address: $ips[.key]})' specs.json > result.json
生成的result.json内容
{ "host1": { "cores": 2, "memory": 4, "address": "1.1.1.1" }, "host2": { "cores": 4, "memory": 8, "address": "1.1.1.2" }, "host3": { "cores": 2, "memory": 6, "address": "1.1.1.3" } }
命令解释
--argfile ips ip.json:将ip.json的内容加载到jq变量$ips中,方便后续引用with_entries(...):遍历specs.json的每一组键值对(即每个主机的条目).value += {address: $ips[.key]}:对每个主机的对象进行扩展,添加address字段,字段值从$ips中根据当前主机的键(如host1)获取对应的IP地址
内容的提问来源于stack exchange,提问作者pepoluan
相关产品推荐
相关产品推荐

