求将Linux下jq拆分大JSON的方法转换为Windows适用版本
Windows环境下用jq拆分超大JSON文件方案
针对你手里20-100GB的数组型超大JSON文件,这里提供两种Windows下的拆分方案,适配CMD批处理和PowerShell,都是基于你找到的Linux方案转换而来:
一、CMD批处理脚本方案
- 新建一个文本文件,命名为
split_json.bat,把下面的代码复制进去:
@echo off setlocal enabledelayedexpansion :: 请根据你的需求修改下面的配置参数 set "input_file=data.json" :: 替换成你的超大JSON文件路径 set "items_per_file=1000" :: 每个小文件要包含的JSON元素数量 set "output_prefix=output_" :: 输出小文件的前缀名 :: 获取JSON数组的总元素数量 for /f %%a in ('jq length %input_file%') do set "total_items=%%a" :: 计算需要拆分的总批次数 set /a "total_batches=(total_items + items_per_file - 1)/items_per_file" :: 循环执行拆分 for /l %%i in (0,1,%total_batches%) do ( set /a "start=%%i * items_per_file" set /a "end=start + items_per_file" jq ".[!start!:!end!]" %input_file% > %output_prefix%%%i.json :: 删除可能产生的空文件 for %%f in (%output_prefix%%%i.json) do if %%~zf equ 0 del %%f ) echo 拆分完成! pause
- 修改脚本里的配置参数,把
input_file改成你的实际文件路径,调整items_per_file控制每个小文件的大小 - 双击运行这个批处理文件即可
二、PowerShell脚本方案
- 新建一个文本文件,命名为
Split-Json.ps1,复制下面的代码:
# 请根据需求修改配置参数 $inputFile = "data.json" # 你的超大JSON文件路径 $itemsPerFile = 1000 # 每个小文件包含的元素数量 $outputPrefix = "output_" # 输出文件前缀 # 获取JSON数组的总元素数 $totalItems = jq -r length $inputFile # 计算总批次数 $totalBatches = [math]::Ceiling($totalItems / $itemsPerFile) # 循环拆分 for ($i = 0; $i -lt $totalBatches; $i++) { $start = $i * $itemsPerFile $end = $start + $itemsPerFile jq ".[$start:$end]" $inputFile | Out-File "$outputPrefix$i.json" -Encoding utf8 # 清理空文件 $outputPath = "$outputPrefix$i.json" if ((Get-Item $outputPath).Length -eq 0) { Remove-Item $outputPath } } Write-Host "拆分完成!"
- 修改配置参数后,右键选择“用PowerShell运行”即可
注意事项
- 以上方案仅适用于最外层是数组结构的JSON文件(格式为
[{},{},...]),如果你的JSON不是这种结构,需要先通过jq调整(比如提取特定数组字段) - 超大文件处理耗时较长,建议在系统空闲时执行
- 如果遇到编码乱码问题,可以在jq命令后添加
--utf8参数,或者调整PowerShell的输出编码
内容的提问来源于stack exchange,提问作者fsumathguy
相关产品推荐
相关产品推荐

