You need to enable JavaScript to run this app. 如何借助jq按固定数量拆分JSON对象并存为独立文件
优惠活动
大模型
产品
解决方案
定价
更多

如何借助jq按固定数量拆分JSON对象并存为独立文件

基于jq的NDJSON按固定条数拆分实现

完全可以通过jq实现上述拆分需求,以下是可直接落地的操作命令:

针对当前场景的直接实现

你的输入文件为15个逐行存储的独立JSON对象,拆分要求为每5个对象为一组存入独立文件,对应可直接运行的命令如下:

  • 提取前5个对象存入FirstTopObject.json
jq -n '[inputs] | .[0:5][]' 你的输入文件路径.ndjson > FirstTopObject.json

该命令会精准匹配storeId为0001到0005的5个对象,逐行保持NDJSON格式输出。

  • 提取第6到第10个对象存入SecondTopObject.json
jq -n '[inputs] | .[5:10][]' 你的输入文件路径.ndjson > SecondTopObject.json

该命令会匹配storeId为0006到0010的5个对象。

  • 提取最后5个对象存入ThirdTopObject.json
jq -n '[inputs] | .[10:15][]' 你的输入文件路径.ndjson > ThirdTopObject.json

该命令会匹配storeId为0011到0015的5个对象。

实现逻辑说明

  • [inputs]:逐行读取NDJSON输入内容,聚合为包含所有对象的JSON数组,保证索引顺序和文件内的行序完全一致。
  • .[start:end]:通过数组切片语法精准截取对应索引范围的对象,和你要求的分组阈值完全匹配。
  • .[]:将截取的数组逐元素展开输出,保持原有的逐行JSON格式,不会将内容聚合为单个数组结构。

大文件场景的优化实现

如果输入NDJSON文件体积较大,无法一次性加载到内存,可通过单进程流处理的方式完成拆分,全程逐行读取文件,无全量内存加载:

jq -n '
  reduce inputs as $item ({seq:0, batch1:[], batch2:[], batch3:[]};
    .seq += 1 |
    if .seq <= 5 then
      .batch1 += [$item]
    elif .seq <= 10 then
      .batch2 += [$item]
    else
      .batch3 += [$item]
    end
  ) |
  (
    .batch1[] | tostring | "printf %s\\n \(.) >> FirstTopObject.json"
    , (.batch2[] | tostring | "printf %s\\n \(.) >> SecondTopObject.json")
    , (.batch3[] | tostring | "printf %s\\n \(.) >> ThirdTopObject.json")
  )
' 你的输入文件路径.ndjson | bash

结果校验

生成三个文件后,可通过以下命令快速验证内容正确性:

  • 查看第一个文件的storeId列表
jq -r '.storeId' FirstTopObject.json

预期输出按顺序为0001、0002、0003、0004、0005。

  • 查看第二个文件的storeId列表
jq -r '.storeId' SecondTopObject.json

预期输出按顺序为0006、0007、0008、0009、0010。

  • 查看第三个文件的storeId列表
jq -r '.storeId' ThirdTopObject.json

预期输出按顺序为0011、0012、0013、0014、0015。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 00:48:01