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

InformationsquelleAutor Chevron | 2014-06-05