转储和加载以^{'null'
为键的dictionary。
值不受影响,但如果字符串键'null'
实际存在,情况会变得更糟。
我在这里做错什么了?为什么我不能用None
键序列化/反序列化^{
>>> json.loads(json.dumps({'123':None, None:'What happened to None?'}))
{u'123': None, u'null': u'What happened to None?'}
>>> json.loads(json.dumps({'123':None, None:'What happened to None?', 'null': 'boom'}))
{u'123': None, u'null': u'boom'}
根据specification,
None
不是有效的密钥。它相当于一个JSON对象表达式,如下所示这是无效的(即,不能使用语法图生成)
可以说,JSON模块应该在序列化时引发异常,而不是静默地生成值的字符串表示。
编辑刚刚看到,模块的行为是documented(有些含蓄):
所以看起来,这种行为似乎是有意的(考虑到当前的JSON规范,我仍然觉得它有问题)。
如@dan04所示,
None
被转换为'null'
。一切都很好,值存储在
但随后又来了一个名为
'null'
的密钥。所以None/
'null'
-键("What happened to None?"
)的旧值被"boom"
覆盖。JSON对象是字符串到值的映射。如果您尝试使用其他类型的键,它们将转换为字符串。
相关问题 更多 >
编程相关推荐