使用jq --stream流模式解析20GB大体积JSON并提取目标格式数据
问题原因
你当前使用的命令仅筛选出了匹配路径的原子流片段,每个time、value都是独立的流条目,没有完成嵌套结构的重组,因此会出现字段分散、无外层列表的问题。
解决方案
使用jq流模式自带的fromstream和路径截断能力重构目标结构,全程流处理不会全量加载文件,完全适配20GB大文件场景,命令如下:
jq --stream -n ' [ inputs | select(.[0][0] == "tooldatareports" and .[0][2] == "tooldata" and .[0][4] == "data") | .[0] |= .[5:] | fromstream(.) | {data: .} ] ' data.json
命令说明
--stream:开启流模式逐片解析JSON,不会全量加载文件到内存-n:不把输入作为单个JSON读取,配合inputs遍历所有流条目select(...):过滤出所有路径匹配tooldatareports[N].tooldata[M].data的流条目,精准定位到你需要的data数组范围.[0] |= .[5:]:截断路径前5段前缀,剩余路径为data数组内部的相对路径,用于后续结构重组fromstream(.):把分散的流条目重组成完整的data数组结构{data: .}:把每个重构好的data数组包装成要求的字典格式- 最外层的
[]:把所有生成的字典收集为外层列表,完全匹配你需要的输出格式
内容的提问来源于stack exchange,提问作者CYC
相关产品推荐
相关产品推荐

