Tengo el siguiente código muy básico que lanza; 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 para la variable de datos, de la siguiente manera, pero arroja el mismo error; jData = json.loads(myResponse.content).decode('utf-8')
¿Alguna sugerencia?
Respuestas:
json.loads(myResponse.content.decode('utf-8'))
Lo pones en el orden equivocado, error inocente.
(Respuesta en profundidad). Como lo señaló cortésmente wim, en algunos casos raros, 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 tirar un valioso ancho de banda. Por lo tanto, 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 incorporada de la solicitud
.json()
:O puede optar por la detección de personajes a través de
chardet
. Chardet es una biblioteca desarrollada en base a un estudio. La biblioteca tiene una función:detect
. Detect puede detectar las codificaciones más comunes y luego usarlas para codificar su cadena con.import chardet json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))
fuente
Deje que las solicitudes lo descodifiquen por usted:
Esto verificará los encabezados (tipo de contenido) y la codificación de respuesta, detectando automáticamente cómo decodificar el contenido correctamente.
fuente
python3.6 + hace esto automáticamente. por lo que su código no debería devolver el error en python3.6 +
que hay de nuevo en python3.6
fuente