繁体   English   中英

json.load效率低下吗?

[英]Is json.load inefficient?

当我发现一些好奇的东西时,我正在寻找json模块的源代码来尝试回答另一个问题。 删除docstring和一大堆关键字参数, json.load的源代码如下:

def load(fp):
    return loads(fp.read())

这根本不像我预期的那样。 如果json.load不能避免一次读取整个文件的开销,那么它是否比json.loads(f.read())节省了几个字符的源代码? 为什么它甚至存在? 为什么它得到短名称,而不是loads获取load名称和load得到像loadf这样的名称? 我可以想到原因(例如,复制pickle界面),但任何人都可以提供权威答案而不是推测吗?

虽然很自然地期望json.load()做得更好,如评论中所提到的,但并不能保证这样做。 这纯粹是推测性的,但如果我是一个Python维护者,我会设计模块以简化和最少的维护开销。

Python标准库json模块在速度方面或内存使用方面并不是最佳的。 对于不同的最佳点,有许多替代的JSON读取实现,其中一些具有Python绑定,例如Jansson

https://stackoverflow.com/a/3512887/315168

替代JSON实现源于以有效方式处理流和/或大量数据的必要性。

可以肯定地说,从文件中读取JSON虽然很重要,但它并不是JSON序列化的主要用例。 因此,从特定情况下(从大量数据结构序列化到磁盘的更有效方法),从文件实现高效的JSON加载并不那么有趣。

但是,概括概念可能会引入一些有用的方面(例如,来自网络流的JSON反序列化,或者来自管道的渐进式JSON反序列化)。

我们正在寻找的是一个流解析器(例如像SAX for XML)。 YAJL是一种常见的解析器,并且有一些Python绑定

另请参阅此问题的最佳答案: 是否有针对JSON的流式API?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM