3 回答

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

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果可能,此函數(shù)將遞歸地將所有字符串鍵轉(zhuǎn)換為int鍵。如果不可能,則密鑰類型將保持不變。
我在下面稍微調(diào)整了JLT的示例。使用我的一些巨大的嵌套字典,這些代碼使字典的大小發(fā)生了變化,但有一個(gè)例外。無論如何,歸功于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貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果確實(shí)需要,可以使用以下命令檢查是否可以再次將其轉(zhuǎn)換為整數(shù)的鍵:
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
添加回答
舉報(bào)