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版本,其他默认即可
- 点击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 形式返回。这也能让解析速度更快一些。