如何使用jq流式处理超大JSON文件并将其转换为CSV格式
超大JSON文件流式转CSV的jq命令调整方案
你之前使用-s参数会将整个JSON文件全量加载到内存解析,所以处理2GB以上大文件时会触发内存不足问题,流式处理会边读取文件边解析内容,全程不会加载全量数据到内存,完全适配大文件场景。
调整后的可直接生成目标CSV的命令如下:
jq -r --stream ' # 输出CSV表头 ["address","lat","lon"] | @csv, # 流式处理每一个顶层JSON对象 (fromstream(0|truncate_stream(inputs)) | [._source.name.default, ._source.center_point.lat, ._source.center_point.lon] | @csv )' pelias_minify.json > pes.csv
命令说明
- 加
-r参数是为了输出原始CSV格式,避免jq给输出结果额外套一层转义引号 - 表头固定按你需要的
address、lat、lon顺序输出,不需要动态读取字段,减少不必要的性能开销 @csv会自动处理地址字段中的逗号、特殊符号、引号等转义逻辑,不会出现CSV列错位问题- 如果你的JSON存在字段缺失的情况,可以给字段增加默认值避免报错,示例如下:
[._source.name.default // "", ._source.center_point.lat // "", ._source.center_point.lon // ""]
内容的提问来源于stack exchange,提问作者Nguyen Hoang Vu
相关产品推荐
相关产品推荐

