为什么在使用json.dumps时,python dict的int键变为字符串?

jve*_*dge 31 python serialization json

根据这个转换表,当使用JSON模块进行序列化时,Python int会被编写为JSON数字 - 正如我所期望的那样.

我有一个带整数键和整数值的字典:

>>> d = {1:2}
>>> type(d.items()[0][0])
<type 'int'>
>>> type(d.items()[0][1])
<type 'int'>
Run Code Online (Sandbox Code Playgroud)

当我使用json模块将其序列化为JSON字符串时,该值被写为数字,但键被写为字符串:

>>> json.dumps(d)
'{"1": 2}'
Run Code Online (Sandbox Code Playgroud)

这不是我想要的行为,它似乎特别破碎,因为它打破了json.dumps/json.loads round-tripping:

>>> d == json.loads(json.dumps(d))
False
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,有没有办法可以强制将密钥写成数字?

Sea*_*ira 38

原因很简单,JSON不允许使用整数键.

object
    {}
    { members } 
members
    pair
    pair , members
pair
    string : value  # Keys *must* be strings.
Run Code Online (Sandbox Code Playgroud)

至于如何解决这个限制 - 首先需要确保接收实现可以处理技术上无效的JSON.然后,您可以替换所有引号或使用自定义序列化程序.