TypeError: el objeto JSON debe ser str, no ‘bytes’

Tengo el siguiente código, muy básico que lanza; TypeError: el objeto JSON debe ser str, no ‘bytes’

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) 

Intento establecer la deencoding en la variable Data, como se muestra a continuación, pero produce el mismo error; jData = json.loads(myResponse.content).decode('utf-8')

¿Alguna sugerencia?

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

Solo lo pones en el orden equivocado, inocente error.


(Respuesta en profundidad). Como lo señaló con cortesía wim, en algunos casos raros, podrían optar por UTF-16 o UTF-32. Estos casos serán menos comunes como los desarrolladores, en ese escenario se estaría decidiendo conscientemente a tirar un ancho de banda valioso. Por lo tanto, si tiene problemas de encoding, puede cambiar utf-8 a 16, 32, etc.

Hay un par de soluciones para esto. Podría usar la función .json() incorporada de la solicitud:

 myResponse.json() 

O bien, puede optar por la detección de caracteres a través de chardet . Chardet es una biblioteca desarrollada a partir de un estudio. La biblioteca tiene una función: detect . Detect puede detectar las codificaciones más comunes y luego usarlas para codificar tu cadena con.

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

Deja que las solicitudes lo decodifiquen por ti:

 data = response.json() 

Esto verificará los encabezados (tipo de contenido) y la encoding de respuesta, detectando automáticamente cómo descodificar el contenido correctamente.

python3.6 + hace esto automáticamente. Por lo tanto, su código no debe devolver el error en python3.6 +

que hay de nuevo en python3.6