2016-12-25 32 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"]' 
相關問題