使用json.loads v / s yajl.loads在python中读取大型JSON文件

时间:2019-02-01 05:29:51

标签: python json yajl

我正在处理巨大的JSON文件,大小在100-300 MB之间。因此,为了节省磁盘空间(和计算时间?),我将JSON文件转换为.json.gz文件,并进行如下操作:

with gzip.GzipFile(json_file, 'r') as f:
    return json.loads(f.read().decode('utf-8'))

json.loads不会对内存使用造成任何问题,但是我想提高速度,因此我尝试了py-yajl(不要与yajl-py混淆,也尝试过,但是自从我解析流式JSON以来,这花费了更多时间,就像这样:

yajl.loads(f.read().decode('utf-8'))

但是,正如我在声称yajljsonsimplejson库的网站上看到的那样,我看不到执行时间有所改善。相反,与json相比花费了更多时间。我在这里想念什么吗?在什么情况下,yajl应该比json/simplejson快?速度也取决于JSON文件的结构吗?

我的JSON文件如下:

[
    {
        "bytes_sent": XXX,
        "forwardedfor": "-",
        "hostip": "XXX",
        "hostname": "XXX",
        "https": "on",
        "landscapeName": "XXX",
    },
    ...
]

我知道这是一个主观的问题,可能会结束,但是我无法在任何地方消除疑问,同时,我想了解这些库在黑白方面的区别更多细节,请在这里询问。

1 个答案:

答案 0 :(得分:0)

如果您一次将整个结构读入内存,则外部库没有任何好处。这样的工具的动机在于,它允许您零碎地处理事物,而不必首先或根本不将整个事物加载到内存中。如果您的JSON是事物列表,请通过库提供的回调一次处理一件事物。