TypeError: объект JSON должен быть str, а не 'bytes'

У меня есть следующий, очень простой код, который бросает; TypeError: объект JSON должен быть str, а не '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)

Я пытаюсь установить декодирование в переменную Data следующим образом, но она вызывает ту же ошибку; jData = json.loads(myResponse.content).decode('utf-8')

Любые предложения?

Ответ 1

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

Вы просто поставили это в неправильном порядке, невинная ошибка.


(Подробный ответ). Как вежливо указывает wim, в некоторых редких случаях они могут выбрать UTF-16 или UTF-32. Эти случаи будут менее распространены, чем разработчики, в этом сценарии будет сознательно решено выбросить ценную пропускную способность. Таким образом, если вы столкнетесь с проблемами кодирования, вы можете изменить utf-8 на 16, 32 и т.д.

Есть несколько решений для этого. Вы можете использовать встроенную функцию запроса .json():

myResponse.json()

Или вы можете выбрать обнаружение персонажа с помощью chardet. Chardet - это библиотека, разработанная на основе исследования. Библиотека имеет одну функцию: detect. Detect может обнаружить наиболее распространенные кодировки, а затем использовать их для кодирования вашей строки.

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

Ответ 2

Пусть запросы декодируют это для вас:

data = response.json()

Это проверит заголовки (Content-Type) и кодировку ответа, автоматически обнаружив, как правильно декодировать контент.