如何通过Bash或JQ按ID合并多文件中的JSON数据?
按ID合并多文件中的JSON对象
可以用以下jq命令实现按id字段合并多个文件中的JSON对象,合并test字段的内容:
jq -n ' reduce inputs as $item ({}; .[$item.id] += {test: $item.test} ) | to_entries[] | {id: .key, test: .value.test} ' file1.json file2.json file3.json
命令解释:
-n:禁用jq自动读取输入的默认行为,改用inputs处理所有输入文件的每一行JSONreduce inputs as $item ({}; ...):遍历所有输入的JSON对象,以空对象作为初始容器,逐步累加合并结果.[$item.id] += {test: $item.test}:以id为唯一标识,将当前对象的test属性合并到容器中对应id的test字段(jq的+=操作符会自动合并对象属性)to_entries[]:将容器中的键值对(键为id,值为合并后的对象)转换为可遍历的数组元素{id: .key, test: .value.test}:将每个数组元素格式化为你需要的最终JSON结构,输出结果
执行该命令后,会直接输出你期望的合并结果:
{"test":{"a":2,"b":3,"c":8},"id":"850303847"} {"test":{"a":3,"b":3,"c":4},"id":"2742540872"} {"test":{"a":4,"b":4,"c":5},"id":"1358887220"}
内容的提问来源于stack exchange,提问作者user6903701
相关产品推荐
相关产品推荐

