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

Using json.loads v/s yajl.loads for reading a large JSON file in python

我正在处理巨大的 JSON 文件,大小在 100-300 MB 之间。因此,为了节省磁盘 space(和计算时间?),我将 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",
    },
    ...
]

我知道这是一个主观问题,很可能会被关闭,但我无法从任何地方清除我的疑虑,同时我想知道其中的区别b/w 更详细地介绍了这些库,因此在这里询问。

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