2013-04-15 4 views
0

Pourquoi ai-jeDécodage JSON avec Python

ValueError: No JSON object could be decoded

de ce code:

import urllib.request,json 

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

La pleine erreur:

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 

La sortie de str(n.readall()):

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

Peut-être que le b le supprime?

Si c'est le problème, comment puis-je convertir le flux binaire du readall en une chaîne et ne pas avoir b? J'essaie d'apprendre un petit python, alors gardez ça à l'esprit. J'utilise Python 3.3 dans Windows.

+1

double possible de [? Utilisez "objet comme octet" de urlopen.read avec JSON] (http://stackoverflow.com/questions/10846112/use -byte-like-object-from-urlopen-read-with-json) –

Répondre

4

Je crois que c'est une copie exacte de this question, mais malheureusement il n'y a pas de réponse acceptée.

De mon côté, cela fonctionne:

import urllib.request,json 

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

Pas besoin de décoder, 'json' le fait pour vous. –

+0

Si je ne décode pas, j'obtiens ceci: 'TypeError: impossible d'utiliser un motif de chaîne sur un objet de type bytes'. J'utilise python 3.1 au lieu de 3.3, donc c'est peut-être pourquoi. –

+0

Ah, non, vous avez raison. –