json.loads不保留双引号

Shr*_*rey -3 python string json

当我使用时json.loads,它将双引号转换为单引号.这让我感到不安,有人可以帮忙澄清一下吗?

>>> import simplesjson as json
>>> string = '{"created_at": "2012/02/05 04:03:50 -0800"}'
>>> json.loads(string,'utf-8')
{'created_at': '2012/02/05 04:03:50 -0800'}
Run Code Online (Sandbox Code Playgroud)

我知道这是一种正常的行为,我可以轻松地调整我的代码.但是想一想是否可以实现同样的目标?

Mar*_*ers 6

首先:报价不是价值的一部分.它们是语法的一部分,向解析器发出定义字符串的信号.

JSON仅支持双引号,但在Python中,可以使用单引号或双引号定义字符串.当回显字符串值时,Python通过向您显示重新定义相同值的Python语法来反映该值.对于此表示,单引号是首选.仅当值实际包含至少一个单引号且没有双引号时才使用双引号:

>>> "Normal strings are reflected with single quotes by Python"
'Normal strings are reflected with single quotes by Python'
>>> 'Single quote: \''
"Single quote: '"
>>> 'Single quote: \', and a double quote: \"'
'Single quote: \', and a double quote: "'
Run Code Online (Sandbox Code Playgroud)

你看到的是完全正常的行为.你无法改变这一点; 你看到的输出是一个调试工具.如果这是您想要更改的内容,请生成您自己的格式化程序.

当您再次从Python结构生成JSON时,只会使用双引号来生成有效的JSON输出:

>>> import json
>>> json_string = '{"created_at": "2012/02/05 04:03:50 -0800"}'
>>> json.loads(json_string)
{u'created_at': u'2012/02/05 04:03:50 -0800'}
>>> json.dumps(json.loads(json_string))
'{"created_at": "2012/02/05 04:03:50 -0800"}'
Run Code Online (Sandbox Code Playgroud)