web-dev-qa-db-fra.com

TypeError: l'objet JSON doit être str, pas 'octets'

J'ai le code suivant, très basique qui jette; TypeError: l'objet JSON doit être str, pas 'octets'

import requests
import json

url = 'my url'
user = 'my user'
pwd = 'my password'

response = requests.get(url, auth=(user, pwd))

if(myResponse.ok):
    Data = json.loads(myResponse.content)

J'essaie de définir décoder à la variable Data, comme suit, mais il jette la même erreur; jData = json.loads(myResponse.content).decode('utf-8')

Aucune suggestion?

61
FunnyChef
json.loads(myResponse.content.decode('utf-8'))

Vous venez de le mettre dans le mauvais ordre, erreur innocente.


(Réponse détaillée). Comme l’ont fait remarquer courtoisement wim, dans de rares cas, ils pourraient opter pour le format UTF-16 ou UTF-32. Ces cas seront moins fréquents car les développeurs, dans ce scénario, décideraient consciemment de jeter de la bande passante précieuse. Donc, si vous rencontrez des problèmes d’encodage, vous pouvez changer utf-8 à 16, 32, etc.

Il y a deux solutions à cela. Vous pouvez utiliser la fonction intégrée .json() de la requête:

myResponse.json()

Vous pouvez également opter pour la détection de caractères via chardet. Chardet est une bibliothèque développée à partir d'une étude. La bibliothèque a une fonction: detect. Detect peut détecter les encodages les plus courants, puis les utiliser pour encoder votre chaîne.

import chardet
json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))
106
Neil

Laissez les demandes le décoder pour vous:

data = response.json()

Cela vérifiera les en-têtes (Content-Type) et le codage de la réponse, en détectant automatiquement comment décoder le contenu correctement.

27
wim

python3.6 + fait ceci automatiquement.so votre code ne devrait pas retourner d'erreur dans python3.6 +

Quoi de neuf dans python3.6

6
Suraj Shrestha