web-dev-qa-db-fra.com

TypeError: impossible d'utiliser un modèle de chaîne sur un objet semblable à des octets

import json
import requests

url = 'http://developer.usa.gov/1usagov.json'
r = requests.get(url, stream=True)

for line in r.iter_lines():
    if line:
        print (json.loads(line))

Donne cette erreur:

TypeError: can't use a string pattern on a bytes-like object

Lors de la visualisation via le navigateur, je vois que la réponse est un Json mais la bibliothèque de requêtes dit que c'est un objet comme des octets, pourquoi?

25
user3249433

Si vous utilisez Python 3.x, vous devez passer l'objet str à json.loads .

Remplacez la ligne suivante:

print(json.loads(line))

avec:

print(json.loads(line.decode()))

MISE À JOUR: Le comportement a changé dans Python 3.6. L'argument peut maintenant être de type octets ou bytearray. Le codage d'entrée doit être UTF-8, UTF-16 ou UTF-32.

37
falsetru