因此,有效的JSON必須是Object或Array,是否正確?我期待以下代碼拋出異常,但它不是:Python JSON模塊不會爲無效的JSON拋出異常
>>> import json
>>> json.loads("245235")
245235
因此,有效的JSON必須是Object或Array,是否正確?我期待以下代碼拋出異常,但它不是:Python JSON模塊不會爲無效的JSON拋出異常
>>> import json
>>> json.loads("245235")
245235
這不是無效的JSON *。 Number是一個有效的JSON類型,就像對象一樣。 http://en.wikipedia.org/wiki/JSON#Data_types.2C_syntax_and_example任何這些類型都可以單獨出現,儘管對象和數組可能是最常見的頂級類型。
*根據Python實現
編輯:
如刪除(不知道爲什麼)回答指出,Python文檔表明,JSON RFC確實需要頂級對象是的數組或對象類型,但json
模塊不強制執行此操作。由於我對JSON的許多瞭解來自於使用python json
模塊,我不知道這種行爲的可移植性如何。
按照要求,這是在http://docs.python.org/2/library/json.html#standard-compliance注意:
該模塊不符合RFC遵守的嚴格的方式, 實施一些擴展是有效的JavaScript但不是有效的 JSON。特別是:
- 頂層非對象,非數組值被接受並輸出;
- 接受並輸出無限和NaN數值;
- 接受對象中的重複名稱,只使用最後一個名稱 - 值對的值。
數據可以具有wide range of types包括字符串,數字和布爾值
的RFC僅適用於'應用/ json'媒體類型,這是唯一的可能的使用情況爲JSON的子集。 – Aya
哎呀,所以我應該檢查isinstance(結果,字典)(或列表),如果我想驗證應用程序/ JSON數據。 – speg
@speg:是的,這聽起來很合理。我在文檔中簡單探討了一下,看看你是否可以要求它對此嚴格,但我沒有看到任何明顯的方法來做到這一點,所以檢查你不想要的擴展名看起來是公平的。 – FatalError