使用ijson

时间:2016-08-18 19:20:42

标签: python json yajl ijson

我有一个大型的JSON文件,如下所示:

{"details":{

    "1000":[
        ["10","Thursday","1","19.89"],

        ["12","Monday","3","20.90"],
        ...
    ]
    "1001":[
        ["30","Sunday","11","80.22"],

        ["88","Wednesday","22","8.29"],
        ...
    ]

    }
}

现在我使用 ijson (Interactive Json)使用代码提取“详细信息”值中的“1000”,“1001”等变量中的列表下面:

import ijson as ijson
filename='Clean_Details.json'

with open(filename,'r') as f:
    objects=ijson.items(f,'details.1001.item')
    for row in objects:
        print(row)
    print("Done")

但问题是:上面代码中的循环没有终止。在1001中打印最终列表后,它继续运行。

我猜测上面代码中的Generator(对象)没有遇到 StopIteration 不知道原因。

有人可以帮忙吗? 我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

好的,因为 JSON 文件的大尺寸是> 800MB ,大​​约有超过一百万条记录,解析需要时间才能完成,所以

循环最终终止,但需要一些时间才能完成。在具有正常规格的电脑上,它肯定需要一些时间。

还使用:

import ijson as ijson

在非常大的文件上速度慢,因为大多数解析都是使用python后端代码进行的,所以为了提高速度,

使用

更好
import ijson.backends.yajl2_cffi as ijson

因为它使用 cffi 在C语言中有一个后端,这确实改善了上述代码的运行时间。