Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python+;JSON,没有发生什么事?_Python_Json_Dictionary - Fatal编程技术网

Python+;JSON,没有发生什么事?

Python+;JSON,没有发生什么事?,python,json,dictionary,Python,Json,Dictionary,转储和加载带有as键的dict会导致带有'null'键的dict 值不受影响,但如果字符串键'null'实际存在,情况会变得更糟 我做错了什么?为什么我不能用None键序列化/反序列化 例子 根据,None不是有效密钥。它相当于一个JSON对象表达式,如下所示 { ..., null: ..., ... } 无效(即,无法使用语法图生成。) 可以说,JSON模块应该在序列化时引发异常,而不是静默地生成值的字符串表示 EDIT刚刚看到,模块的行为(有点含蓄): 如果skipkeys为True(默

转储和加载带有as键的dict会导致带有
'null'
键的dict

值不受影响,但如果字符串键
'null'
实际存在,情况会变得更糟

我做错了什么?为什么我不能用
None
键序列化/反序列化

例子 根据,
None
不是有效密钥。它相当于一个JSON对象表达式,如下所示

{ ..., null: ..., ... }
无效(即,无法使用语法图生成。)

可以说,JSON模块应该在序列化时引发异常,而不是静默地生成值的字符串表示

EDIT刚刚看到,模块的行为(有点含蓄):

如果skipkeys为True(默认值:False),则将跳过非基本类型(str、unicode、int、long、float、bool、None)的dict键,而不是引发TypeError

因此,似乎这种行为是故意的(考虑到当前的JSON规范,我仍然觉得有问题)。

JSON对象是字符串到值的映射。如果您尝试使用其他类型的键,它们将被转换为字符串

>>> json.loads(json.dumps({123: None}))
{'123': None}
>>> json.loads(json.dumps({None: None}))
{'null': None}

如@dan04所示,
None
被转换为
'null'

一切正常,值存储在dict中

“null”:“一个都没有发生什么事?”
但随后出现了另一个键,名为
'null'


因此,None/
'null'
-键(
“None发生了什么事?”
)的旧值被
“boom”

skipKeys覆盖,对观察到的行为没有影响。“None”是一个基本类型,因此skipKeys=True不会导致“跳过”,正如skipKeys=False不会导致类型错误一样。我希望文档中有一个小注释,比如:“对于可逆编码,只使用字符串作为键。”顺便说一句,第二个代码的输出似乎被篡改了。
>>> json.loads(json.dumps({123: None}))
{'123': None}
>>> json.loads(json.dumps({None: None}))
{'null': None}