[英]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.