You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq将大型JSON文件按指定对象数量拆分?

用jq拆分大型JSON文件的完美方案

嘿,这个需求用jq完全能搞定,而且方法挺直接的!针对你那400万顶层对象的JSON文件,要拆成每个含10000个对象的小文件,我推荐两种方法,其中第一种处理大文件更高效:

方法一:jq + split 组合(推荐,性能更优)

这种方法先把JSON数组拆成单行对象,再用split按行数分割,最后把每行重新组合成JSON数组,全程内存占用低,超适合处理超大型文件。

直接运行这条命令就行:

jq -c '.[]' large_data.json | split -l 10000 -d -a 4 - 'batch_' --filter='jq -s . > $FILE.json'

命令拆解:

  • jq -c '.[]' large_data.json:把原JSON数组里的每个顶层对象单独输出成一行(-c是紧凑模式,确保每个对象占一行),这一步是为了让split能按行数精准分割。
  • split -l 10000 -d -a 4 - 'batch_':
    • -l 10000:每10000行分割成一个文件
    • -d:用数字作为文件后缀(比如0000、0001)
    • -a 4:后缀保留4位数字(足够覆盖400个拆分文件,400万/10000=400)
    • -:表示从标准输入读取内容
    • batch_:拆分后的文件前缀
  • --filter='jq -s . > $FILE.json':把split分割出的每行对象重新组合成JSON数组(jq -s .会把多行JSON对象合并成一个数组),并保存为带.json后缀的文件。

方法二:纯jq实现(适合小文件,内存压力大)

如果不想用split,纯jq也能实现,但处理400万对象的大文件时,内存占用会比较高,只推荐测试小文件时用:

jq -n '
  input | .[] | group_by((input_line_number - 1) / 10000 | floor)[]
  | {batch: .}
  | save("batch_\(._index).json")' large_data.json

不过注意,这个方法需要jq支持save函数(jq 1.6及以上版本),而且大文件下可能因为内存问题变慢。

验证结果

拆分完成后,你可以随便挑一个文件验证对象数量:

jq 'length' batch_0000.json

输出应该是10000,每个对象的嵌套结构也会完整保留,和原文件完全一致。

内容的提问来源于stack exchange,提问作者Chaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:22:39