Python 为什么json.loads()可以处理某些字符串?

Python 为什么json.loads()可以处理某些字符串?,python,json,Python,Json,我有一个类似于json1中所示的JSON字符串。我试图将其解析为JSON,但它似乎不起作用。出什么事了 import json string1 = "[]" list1 = "['hi','bye']" json1 = "{'genre': ['Action', 'Comedy']}" print json.loads(string1) print json.loads(list1) print json.loads("{'genre': ['Action', 'Comedy']}") 这

我有一个类似于
json1
中所示的JSON字符串。我试图将其解析为JSON,但它似乎不起作用。出什么事了

import json

string1 = "[]"
list1 = "['hi','bye']"
json1 = "{'genre': ['Action', 'Comedy']}"

print json.loads(string1)
print json.loads(list1)
print json.loads("{'genre': ['Action', 'Comedy']}")
这给了我一个错误

Traceback (most recent call last):
  File "python", line 8, in <module>
ValueError: No JSON object could be decoded
回溯(最近一次呼叫最后一次):
文件“python”,第8行,在
ValueError:无法解码任何JSON对象

json需要双引号字符串,您有单引号字符串。您可以使用
ast.literal\u eval
加载字符串:

import ast
print(ast.literal_eval("{'genre': ['Action', 'Comedy']}"))
结果:

{'genre': ['Action', 'Comedy']}
JSON(与JavaScript或Python不同)


list1
不是json格式,因为它们不是有效的json…,json字符串应该是双引号
print json.loads(“{”流派“:[“动作”,“喜剧”]}”)
太棒了!啊,这么小的细节。谢谢
>>> print json.loads('["hi","bye"]')
[u'hi', u'bye']

>>> print json.loads("['hi','bye']")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
>>> v = ["hi", "bye"]
>>> repr(v)
"['hi', 'bye']"
>>> json.dumps(v)
'["hi", "bye"]'