是json.load文件效率低下?

2024-05-06 08:01:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在查看json模块的源代码,试图回答另一个问题,这时我发现了一些奇怪的东西。除去docstring和一大堆关键字参数,json.load的来源如下:

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

这一点都不像我预料的那样。如果json.load不能避免一次读取整个文件的开销,那么它相对于json.loads(f.read())的唯一优势是节省几个字符的源代码吗?为什么它会存在?为什么它得到短名称,而不是loads得到load名称,load得到一个类似loadf的名称?我可以想出原因(例如复制pickle接口),但是有谁能提供一个权威的答案而不是猜测?在


Tags: 模块名称jsonread参数return源代码def
2条回答

尽管正如评论中提到的,期望json.load()做得更好是很自然的,但它并不保证这样做。这纯粹是推测性的,但是如果我是Python维护人员,我会以简单和最少的维护开销来设计模块。在

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

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

另一种JSON实现源于高效地处理流和/或大量数据的需要。在

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

然而,概括这个概念可能会引入一些有用的方面(例如,从网络流进行JSON反序列化,或者从管道进行渐进式JSON反序列化)。在

我们要找的是一个流式解析器(例如SAX for XML)。YAJL是一个常见的此类解析器,它有{a2}

另请参阅此问题的顶部答案:Is there a streaming API for JSON?

相关问题 更多 >