Objet HTTPResponse — objet JSON doit être str, pas 'octets'
J'ai essayé de mettre à jour une petite bibliothèque Python appelé libpynexmo de travailler avec Python 3.
J'ai été coincé sur cette fonction:
def send_request_json(self, request):
url = request
req = urllib.request.Request(url=url)
req.add_header('Accept', 'application/json')
try:
return json.load(urllib.request.urlopen(req))
except ValueError:
return False
Quand il est à l', json répond avec:
TypeError: the JSON object must be str, not 'bytes'
J'ai lu à quelques endroits que pour json.load
vous devez passer des objets (Dans ce cas, un HTTPResponse
objet) avec un .read()
attaché, mais il ne fonctionne pas sur HTTPResponse
objets.
Je suis à une perte de l'endroit où aller avec ce côté, mais que la totalité de mon 1500 script de ligne de est fraîchement converti à Python 3, je n'ai pas l'impression de retourner à 2,7.
- Voir ici pour une solution: stackoverflow.com/questions/6862770/...
- avez-vous essayer de passer à travers 2to3?
- Il l'a fait manuellement, donc je pourrais en apprendre plus.
- Trouvé ce lien plus tôt, mais n'a pu faire de sa solution de contournement s'appliquent à ma situation. Je suis incapable de l'utiliser .readall() sur mon objet HTTPResponse.
- Pourquoi ne pouvez-vous pas utiliser
readall
? - si vous essayez de convertir au format json objet de requête, puis de les utiliser: json.charge(à la demande.corps.decode('utf-8'))
- Double Possible de Python 3, let objet json accepter octets ou laissez urlopen chaînes de sortie
Vous devez vous connecter pour publier un commentaire.
J'ai récemment écrit une petite fonction pour envoyer Nexmo messages. Sauf si vous avez besoin de toutes les fonctionnalités de la libpynexmo code, cela devrait faire le travail pour vous. Et si vous souhaitez poursuivre la révision libpynexmo, il suffit de copier ce code. La clé est l'encodage utf8.
Si vous souhaitez envoyer les autres champs avec votre message, la documentation complète de ce que vous pouvez inclure avec un nexmo message sortant est ici
Python 3.4 testé Nexmo sortant (JSON):
Face au même problème, j'ai le résoudre à l'aide de decode()
J'ai rencontré le problème et maintenant il passe
Puisque vous êtes l'obtention d'un HTTPResponse, vous pouvez utiliser La tornade.échapper et ses
json_decode()
pour convertir au format JSON strign dans un dictionnaire:À partir de la notice: