如何使用jq实现JSON对象内的同主键数据分组合并
解决方案
你提供的原始JSON存在重复的顶层id键,标准JSON解析器默认会直接覆盖重复键的内容,仅保留最后一个同键名的值,所以必须使用jq的流解析模式才能保留所有内容完成合并。
具体实现命令
# 将输入文件合并后输出到终端 jq -n --stream 'reduce (inputs | select(length == 2)) as $i ({}; setpath($i[0]; $i[1]))' input.json # 如果需要将结果写入新文件,追加重定向即可 jq -n --stream 'reduce (inputs | select(length == 2)) as $i ({}; setpath($i[0]; $i[1]))' input.json > output.json
命令说明
-n:初始化空对象作为最终输出的基准,不直接读取输入作为默认处理对象--stream:启用流模式解析JSON,不会丢弃重复的顶层键,会将每个JSON节点拆分为「路径数组+对应值」的结构输出reduce (inputs | select(length == 2)) as $i ({}; ...):遍历所有流输出的有效节点(过滤掉节点结束标记),初始值为空对象,逐节点处理setpath($i[0]; $i[1]):根据流输出的路径数组,直接将值写入目标对象的对应层级,相同id下的不同day内容会自动合并,不会出现覆盖丢失的问题
内容的提问来源于stack exchange,提问作者EmaX
相关产品推荐
相关产品推荐

