背景
使用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 形式返回。這也能讓解析速度更快一些。