如何使用jq基于JSON模板填充数据生成目标JSON结构
实现命令
你可以直接使用如下jq命令完成合并:
jq --argfile template json-template.json 'map($template * .)' json-data.json
如果你的jq版本不支持--argfile参数,可以替换为兼容性更好的--slurpfile写法:
jq --slurpfile template json-template.json 'map($template[0] * .)' json-data.json
命令说明
--argfile template json-template.json:将模板文件json-template.json的内容加载为jq内部变量$templatemap($template * .):遍历数据文件json-data.json中的每一个数组元素,将模板对象和当前数据对象合并,数据对象的同名字段会自动覆盖模板的对应字段,刚好符合你需要的填充替换效果。
注意事项
你示例中给出的JSON内容属于非标准格式(对象键未加双引号),实际使用前需要先调整为标准JSON格式,否则jq会解析报错。
标准格式示例:json-template.json
{ "key1": "value1", "key2": "value2", "name": "XXX", "familyName": "YYY" }
json-data.json
[ {"name": "John", "familyName": "Smith"}, {"name": "Samuel", "familyName": "Schnaider"} ]
运行命令后即可直接得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

