90 votes

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?

152voto

Neil Points 11143
json.loads(myResponse.content.decode('utf-8'))

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


(En profondeur de la réponse). Comme courtoisement remarquer par wim, dans certains cas rares, ils pourraient opter pour de l'UTF-16 ou UTF-32. Ces cas sont moins fréquents que les développeurs, dans ce scénario serait consciemment décider de jeter de la bande passante précieuse. Donc, si vous avez des problèmes de codage, vous pouvez modifier l'encodage utf-8, 16, 32, etc.

Il ya un couple de solutions pour cela. Vous pouvez utiliser la requête intégrée .json() fonction de:

myResponse.json()

Ou, vous pouvez opter pour un personnage de détection au moyen chardet. Chardet est une bibliothèque développée, basée sur une étude. La bibliothèque a une fonction: detect. Détecter pouvez détecter la plupart des communes de codages et puis les utiliser pour encoder votre chaîne.

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

32voto

wim Points 35274

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.

18voto

Suraj Shrestha Points 37

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

Quoi de neuf dans python3.6

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X