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
添加回答
举报