如何使用jq合并两个无关联的JSON数组?
按索引合并两个无关联JSON数组
我有两个无关联的JSON数组文件:info.json和keywords.json,需要按数组索引一一对应合并,生成results.json。之前找到的方案都要求两个JSON有关联字段,现求可行方法。
原始文件内容
info.json
[ { "filename": "drilldown.json", "line": 14, "column": "43-49" }, { "filename": "drilldown.json", "line": 10, "column": "38-44" } ]
keywords.json
[ { "keyword": " `master1` " }, { "keyword": " `Master2` " } ]
期望合并结果(results.json)
[ { "filename": "drilldown.json", "line": 14, "column": "43-49", "keyword": " `master1` " }, { "filename": "drilldown.json", "line": 10, "column": "38-44", "keyword": " `Master2` " } ]
解决方案
方法1:Python脚本
通用场景适用,无额外工具依赖,逻辑清晰:
import json # 读取两个JSON文件 with open('info.json', 'r') as f: info_data = json.load(f) with open('keywords.json', 'r') as f: keywords_data = json.load(f) # 按索引合并数组内的对象 merged_data = [] for info, keyword in zip(info_data, keywords_data): merged_item = {**info, **keyword} merged_data.append(merged_item) # 写入结果文件 with open('results.json', 'w') as f: json.dump(merged_data, f, indent=2)
运行脚本后即可生成目标文件,若两个数组长度不一致,zip会以较短数组的长度为准。
方法2:jq命令行工具
适合命令行用户,无需编写脚本,一行命令完成:
jq -n '[inputs] | transpose | map(add)' info.json keywords.json > results.json
命令说明:
-n:不默认读取输入为JSON,手动构建处理逻辑[inputs]:将两个输入文件的内容收集为数组transpose:转置数组,把两个数组的对应索引元素配对map(add):将每一对对象合并- 最终结果重定向到
results.json
内容的提问来源于stack exchange,提问作者anantha
相关产品推荐
相关产品推荐

