如何解析超大JSON文件并将object_array对象输出到独立文件
处理超大JSON:提取object_array中每个对象到独立文件
问题场景
拥有体积可达40GB+的JSON文件,结构包含顶层object_array数组,需将数组内的每个完整对象单独保存到独立文件。此前尝试的命令:
jq -cn --stream 'fromstream(1|truncate_stream(inputs))' test.json| awk '{print > "onif00" NR ".json"}'
存在稳定性问题:要么所有数据写入单个文件,要么生成大量仅含[、{等零碎符号的无效文件。
解决方案
使用精准过滤的jq流式处理命令,配合awk实现按对象拆分文件:
jq -cn --stream ' fromstream( inputs | select(.[0][0] == "object_array" and (.[0] | length) == 2) | .[0] |= .[1:] )' test.json | awk '{print > sprintf("onif%03d.json", NR)}'
命令说明
--stream:启用流式处理,无需加载整个超大文件到内存,适配40GB+级别的JSON文件- 路径过滤:
select(.[0][0] == "object_array" and (.[0] | length) == 2)仅保留object_array数组直接子元素的流数据,过滤掉顶层其他字段及对象内部嵌套结构的多余路径,确保只处理目标对象 - 路径调整:
.[0] |= .[1:]将路径从["object_array", 索引, 子字段]调整为[子字段],让fromstream能正确组装出完整的独立对象 - awk拆分:
sprintf("onif%03d.json", NR)生成按顺序编号的文件名(如onif001.json、onif002.json),每个对象对应一行输出,精准写入独立文件
注意事项
- 确保jq版本≥1.6,旧版本流式处理功能存在兼容性问题
- 处理超大文件时,优先保证磁盘IO充足,避免同时运行高IO负载程序
- 若需要格式化输出的JSON文件,可后续对单个文件执行
jq . filename.json重新格式化
内容的提问来源于stack exchange,提问作者sword_of_omens
相关产品推荐
相关产品推荐

