如何使用jq将两个JSON文件中的对象数组合并为单个数组?
我来帮你搞定这两个JSON文件的合并问题!首先得明确你想要的合并类型,我分两种常见场景给你解决方案:
场景1:直接拼接两个JSON数组
如果只是想把registration.json和useredits.json里的所有对象合并成一个大数组,用这条jq命令就够了:
jq -s 'add' registration.json useredits.json
简单解释下:-s参数会把两个输入文件的内容读取成一个包含两个数组的大数组,add操作则会把这两个数组合并成一个完整的数组。
场景2:根据共同字段合并对应对象
如果你的需求是把两个数组里同标识的对象合并(比如用useredits里的编辑内容覆盖或补充registration里的原始数据),假设每个对象都有唯一的id字段作为标识,试试这条命令:
jq -s 'group_by(.id) | map(add)' registration.json useredits.json
逻辑是这样的:
group_by(.id)会把两个数组里的所有对象按id分组,同一个id的对象会被归到同一个子数组里map(add)会把每个子数组里的对象合并成一个,后面的对象字段会覆盖前面的(刚好符合编辑内容覆盖原始数据的需求)
排查之前的问题
你之前用的方法出问题,大概率是这几个原因:
- 没指定正确的分组字段:如果你的对象不是用
id作为唯一标识,记得把命令里的.id换成你实际用的字段,比如.user_id - JSON格式不合法:先检查两个文件是不是标准的JSON数组,用
jq . registration.json和jq . useredits.json可以快速验证格式是否正确 - 合并逻辑不匹配:如果你的需求就是保留所有重复元素,那应该用场景1的拼接命令,而不是分组合并
内容的提问来源于stack exchange,提问作者Smile4ever
相关产品推荐
相关产品推荐

