2013-04-15 85 views
0

爲什麼我從這個代碼獲得解碼JSON與Python

ValueError: No JSON object could be decoded

import urllib.request,json 

n = urllib.request.urlopen("http://graph.facebook.com/55") 
d = json.loads(str(n.readall())) 

完整的錯誤:

Traceback (most recent call last): 
    File "<pyshell#41>", line 1, in <module> 
    d= json.loads(str(n.readall())) 
    File "C:\Python33\lib\json\__init__.py", line 309, in loads 
    return _default_decoder.decode(s) 
    File "C:\Python33\lib\json\decoder.py", line 352, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Python33\lib\json\decoder.py", line 370, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

str(n.readall())輸出:

'b\'{"id":"55","name":"Jillian Copeland","first_name":"Jillian","last_name":"Copeland","username":"JCoMD","gender":"female","locale":"en_US"}\'' 

也許b正在拋棄它?

如果這是問題,我該如何將二進制流從readall轉換爲字符串,而不是b

我想學習一點python,所以請記住這一點。

我在Windows中使用Python 3.3。

+1

可能重複[?使用從JSON urlopen.read 「像字節對象」(http://stackoverflow.com/questions/10846112/use -byte-like-object-from-urlopen-read-with-json) –

回答

4

我相信這是一個完全重複的this question,但遺憾的是沒有被接受的答案。

我的結束,這個工程:

import urllib.request,json 

n = urllib.request.urlopen("http://graph.facebook.com/55") 
d= json.loads(n.readall().decode('utf-8')) 
+0

不需要解碼,'json'爲你做。 –

+0

如果我不解碼,我得到這個:'TypeError:不能在類字節對象上使用字符串模式。我使用Python 3.1而不是3.3,所以這可能是爲什麼。 –

+0

啊,不,你是對的。 –