2016-12-25 30 views
2

我有一个JSON字符串,如json1所示。我试图解析这是一个JSON,但它似乎并没有工作。出了什么问题?为什么json.loads()在某些字符串上工作?

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 
+1

'list1'不是JSON格式 –

+2

因为他们没有有效的JSON ... HTTP://www.json.org/,JSON字符串应该用双引号'打印json.loads(“{ “流派”:[“动作”,“喜剧”]}')' – danidee

回答

5

JSON预计双引号中的字符串,你有单引号字符串。您可以使用ast.literal_eval加载字符串:

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

结果:

{'genre': ['Action', 'Comedy']} 
+0

太棒了!唷,这么小的细节。谢谢。 –

2

JSON(JavaScript的不同或Python)only allows double-quoted strings

>>> 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 

正因为如此,而且因为Python更倾向于使用 -quoted字符串,Python对象的repr()几乎总是无效 JSON。您必须改用json.dumps()

>>> v = ["hi", "bye"] 
>>> repr(v) 
"['hi', 'bye']" 
>>> json.dumps(v) 
'["hi", "bye"]' 
相关问题