Python使用ijson 解析超大json 文件

背景

使用json 模块解析json需要单次全部载入所有内容,在文件过大时已经不能处理。所以想是否有流式解析json的库可用
稍微搜索了一下找到了ijson

安装ijson

ijson 官方介绍
如其他python 库一样可直接使用pip 直接安装 pip install ijson
正如文档 Backends 中提及的 ijson 提供了几个版本的解析实现

  • yajl2_c
  • yajl2_cffi
  • yajl2
  • yajl
  • python
    默认应该是python 版本,python版本比较慢,解析一个2G 左右的json 文件 本机需要 27 分钟
    其中最快的是 yajl2_c yajl 是一个json库
    windows 上需要手动编译,使用CMake 构建,很容易编译
  • 下载 yajl 源代码解压 yajl-2.1.0.zip
  • 打开cmake GUI source code 选择解压的源代码文件夹,build the binaries 新建一个build 文件夹
  • 点击 Configure 选择Vs版本,其他默认即可
    cmake Configure
  • 点击Generate 即可生成解决方法,打开解决方案,选择Release生成解决方案
    build\yajl-2.1.0\lib\Release文件夹中即可找到生成的动态库
  • 拷贝动态库到可被PTHA找到的文件夹中
  • 使用pip 安装 jajl-py pip install yajl-py
    之后就可以 使用了,但是并不能导入yajl2_c
import ijson.backends.yajl2_cffi as ijson

使用yajl2_cffi 确实会比python 版本快一些 同样的文件 只需要17 分钟

使用

with open(filePath, 'r') as load_f:
      objects = ijson.items(load_f, 'traceEvents.item',use_float=True)
      for v in objects:
            pass

使用 use_float 选项会将非整数以float 形式返回。这也能让解析速度更快一些。

posted on 2020-09-15 15:35  记忆悔中行  阅读(6801)  评论(0编辑  收藏  举报

导航