Tengo el siguiente código muy básico que arroja; TypeError: the JSON object must be str, not '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 configurar la decodificación en la variable de datos, de la siguiente manera, pero arroja el mismo error; jData = json.loads(myResponse.content).decode('utf-8')
¿Alguna sugerencia?
json.loads(myResponse.content.decode('utf-8'))Lo pusiste en el orden equivocado, error inocente.
(Respuesta detallada). Como señaló cortésmente wim, en algunos casos excepcionales, podrían optar por UTF-16 o UTF-32. Estos casos serán menos comunes ya que los desarrolladores, en ese escenario, estarían decidiendo conscientemente desperdiciar ancho de banda valioso. Entonces, si tiene problemas de codificación, puede cambiar utf-8 a 16, 32, etc.
Hay un par de soluciones para esto. Puede usar la función .json() incorporada de la solicitud:
myResponse.json() O bien, puede optar por la detección de caracteres a través 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 su cadena.
import chardet json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))Deje que las solicitudes lo decodifiquen por usted:
data = response.json()Esto verificará los encabezados (Tipo de contenido) y la codificación de la respuesta, detectando automáticamente cómo decodificar el contenido correctamente.
python3.6+ hace esto automáticamente, por lo que su código no debería devolver un error en python3.6+