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?
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"]))
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.
python3.6 + fait ceci automatiquement.so votre code ne devrait pas retourner d'erreur dans python3.6 +