2017年1月9日 星期一

[python] 如何處理大型 json 檔案 streaming JSON parser using ijson



如何處理一個巨大的 json file , 在 XML 不產生dom tree 的時候可以改用 SAX streaming parse XML ,那在 json 的處理上有什麼類似的處理方式嗎?


IIvan Sagalaev http://softwaremaniacs.org/about/en/  有寫了一個

ijson Iterative JSON parser with a standard Python iterator interface

ijson 2.3 : Python Package Index https://pypi.python.org/pypi/ijson/

一個簡單的例子
json file

{
"results":[
  {
  "author":"",
  "board":"myboard",
  "body_raw1":"raw"
  },
  {
  "author":"",
  "board":"myboard",
  "body_raw1":"raw"
  }
  ]
}


import ijson
import os, sys
D = {}
plen = len('results.item.')
for prefix, the_type, value in ijson.parse(open('./b50.json')) :
    #print prefix, the_type, value
    if prefix == 'results.item' and the_type == 'start_map' :
        D = {}
        continue
    if prefix == 'results.item' and the_type == 'end_map' :
        for k,v in D.items():
            print k,v
        print '-----'
        continue
    if 'results.item.' in prefix:
        D[prefix]= value


沒有留言:

張貼留言