3 回答

TA貢獻2051條經驗 獲得超10個贊
原因很簡單,JSON不允許整數鍵。
object
{}
{ members }
members
pair
pair , members
pair
string : value # Keys *must* be strings.
關于如何解決此限制-您首先需要確保接收實現可以處理技術上無效的JSON。然后,您可以替換所有的引號或使用自定義的序列化程序。

TA貢獻1865條經驗 獲得超7個贊
如果可能,此函數將遞歸地將所有字符串鍵轉換為int鍵。如果不可能,則密鑰類型將保持不變。
我在下面稍微調整了JLT的示例。使用我的一些巨大的嵌套字典,這些代碼使字典的大小發生了變化,但有一個例外。無論如何,歸功于JLT!
def pythonify(json_data):
correctedDict = {}
for key, value in json_data.items():
if isinstance(value, list):
value = [pythonify(item) if isinstance(item, dict) else item for item in value]
elif isinstance(value, dict):
value = pythonify(value)
try:
key = int(key)
except Exception as ex:
pass
correctedDict[key] = value
return correctedDict

TA貢獻1886條經驗 獲得超2個贊
如果確實需要,可以使用以下命令檢查是否可以再次將其轉換為整數的鍵:
def pythonify(json_data):
for key, value in json_data.iteritems():
if isinstance(value, list):
value = [ pythonify(item) if isinstance(item, dict) else item for item in value ]
elif isinstance(value, dict):
value = pythonify(value)
try:
newkey = int(key)
del json_data[key]
key = newkey
except TypeError:
pass
json_data[key] = value
return json_data
添加回答
舉報