JSON与Python语法非常相似。所有的JSON对象都可以直接转换成Python吗,而没有错误?
示例
以下是一个有效的JSON对象:
// Valid JSON
{"foo":"bar"}
这个对象会直接转换成一个Python字典,键名为"foo",键值为"bar":
# Python
json_dict = eval('{"foo":"bar"}')
JSON与Python语法非常相似。所有的JSON对象都可以直接转换成Python吗,而没有错误?
示例
以下是一个有效的JSON对象:
// Valid JSON
{"foo":"bar"}
这个对象会直接转换成一个Python字典,键名为"foo",键值为"bar":
# Python
json_dict = eval('{"foo":"bar"}')
不是的。特别地,true
、false
和null
不属于Python语言,虽然它们在Python中都有直接的对应项(分别为True
、False
和None
)。
// Valid JSON
{"sky_is_blue":true}
但在Python中使用时...
# Python
>>> json_dict = eval('{"sky_is_blue":true}')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'true' is not defined
NaN
和Infinity
这样的值并不是严格的JSON,但可能会在JSON字符串中找到(事实上,除非明确告知否则,Python的json模块将使用它们)。 - Thomas K这个问题已经得到解答(并且答案已被接受),但我想指出一个问题,即在Python中,true
、false
和null
不能直接使用。可以通过在评估JSON之前使用以下代码来解决:
true = True
false = False
null = None
ast.literal_eval
结合使用,以构建一个快速的纯Python JSON解析器。 - pokstadast.literal_eval
之前可以执行string.replace('true', 'True')
等操作。当然,这会对{"Quote": "This sentence is false."}
造成不良影响。 - Jasmijn
ast.literal_eval
,比eval
更安全。 - FogleBird