saf*_*afl 19 python json dictionary
转储和装载的字典与None关键,结果在一个字典与'null'作为重点.
值不受影响,但如果'null'实际存在字符串键,情况会变得更糟.
我在这做错了什么?为什么我不能dict用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'}
Run Code Online (Sandbox Code Playgroud)
dan*_*n04 28
JSON对象是字符串到值的映射.如果您尝试使用其他类型的密钥,它们将转换为字符串.
>>> json.loads(json.dumps({123: None}))
{'123': None}
>>> json.loads(json.dumps({None: None}))
{'null': None}
Run Code Online (Sandbox Code Playgroud)
Dir*_*irk 12
根据规范,None不是有效的密钥.它相当于一个JSON对象表达式,看起来像
{ ..., null: ..., ... }
Run Code Online (Sandbox Code Playgroud)
这是无效的(即,无法使用语法图生成.)
可以说,JSON模块应该在序列化时引发异常,而不是静默生成值的字符串表示.
编辑刚刚看到,模块的行为已被记录(有些含蓄):
如果skipkeys为True(默认值:False),则将跳过不是基本类型(str,unicode,int,long,float,bool,None)的dict键,而不是引发TypeError.
所以看起来好像这种行为是有意的(鉴于当前的JSON规范,我仍然觉得它有问题).
小智 5
正如 @dan04 所示,None转换为'null'.
一切都很好,该值存储到字典中
"null": "What happened to None?"
Run Code Online (Sandbox Code Playgroud)
但随后又传来了另一个Key的电话'null'。
因此 None/ 'null'-Key ( "What happened to None?") 的旧值被 覆盖"boom"。
| 归档时间: |
|
| 查看次数: |
39971 次 |
| 最近记录: |