如何用 Python 流式解析 GB 级超大 JSON 文件

小岛来信
小岛来信
发布时间:2026-10-12| 2人浏览过
原创

面对 GB 级超大 JSON 文件,直接使用标准库加载会导致内存溢出且传统分块读取因严格结构而失效。本文引入 ijson 模块实现流式迭代解析,将文档转为生成器并按路径逐条提取目标数据,有效规避内存瓶颈并提升读取效率。

问题分析:为何无法直接加载超大 JSON

Python 标准库在处理常规规模的数据时表现稳定,但一旦遇到 GB 级别的 JSON 文件,直接调用 json.load() 会引发内存报错。该函数会将完整文档一次性载入内存进行解析,超出系统承载上限后将无法继续读写。部分开发者尝试使用 read(1024) 或 readline() 进行物理分块或按行读取,但 JSON 格式具有严格的嵌套结构与语法闭合要求,机械切割后会破坏语法规则,导致解析出的内容完全失去意义。

解决方案:基于 ijson 的流式读取策略

突破该限制的核心思路是流式(Streaming)读取。通过第三方开源库 ijson,可以在不将整个文件装入内存的前提下,按照指定路径逐步提取目标数据。该库内部构建了事件驱动的解析器,以生成器形式向外输送解析结果,天然契合大数据场景的内存管控需求。

GitHub 搜索 python json parser 的相关开源项目列表
在开源社区检索时可快速定位到 ijson 等迭代式解析工具

第1步:确认环境与模块依赖

运行前需确保已安装 ijson。若尚未就绪,可通过包管理命令完成安装,随后在脚本顶部导入:import ijson。

第2步:明确目标数据路径

流式解析需提前规划抽取范围。以下示例数据包含地球下的大洲分区及城市河流信息:

{
  "earth": {
    "europe": [
      {"name": "Paris", "type": "city", "info": "aaa"},
      {"name": "Thames", "type": "river", "info": "sss"}
    ],
    "america": [
      {"name": "Texas", "type": "state", "info": "jjj"}
    ]
  }
}

若只需提取欧洲区域条目,对应路径可定义为 earth.europe.item。其中末尾的 item 用于指示迭代遍历数组元素。

第3步:编写流式读取代码

使用 ijson.items() 打开文件对象并传入目标路径,返回的可迭代对象即为生成器。通过循环安全获取数据:

import ijson

with open('test.json', 'r', encoding='utf-8') as f:
    objects = ijson.items(f, 'earth.europe.item')
    while True:
        try:
            print(objects.__next__())
        except StopIteration as e:
            print("数据读取完成")
            break

第4步:执行核对与性能提示

代码运行后控制台将逐行打印目标字典,并在遍历结束时输出提示信息。该机制仅维持极小的驻留内存,无论源文件膨胀至数十 GB 均可平稳运行。此外,若后续需要进一步提升吞吐速率,可结合 threading 模块构建多线程消费队列,此处不作展开。

补充说明

ijson 官方文档收录于 PyPI,涵盖后端 C 扩展加速、多种输出格式映射等高级用法。熟悉生成器协议的开发者可直接复用现有迭代模板对接不同数据源。

总结

以上就是如何利用Python解析超大的json数据(GB级别)的详细内容,更多关于Python流式解析JSON的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。