簡體   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