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