У меня есть следующий, очень простой код, который выдает: 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)
Я пытаюсь установить декодирование для переменной Data, как показано ниже, но выдает ту же ошибку; jData = json.loads(myResponse.content).decode('utf-8')
Какие-либо предложения?
Ответы:
json.loads(myResponse.content.decode('utf-8'))
Вы просто поставили это в неправильном порядке, невинная ошибка.
(Подробный ответ). Как любезно указал wim, в некоторых редких случаях они могут выбрать UTF-16 или UTF-32. Эти случаи будут менее распространены, поскольку разработчики в этом сценарии будут сознательно отказаться от ценной полосы пропускания. Итак, если у вас возникнут проблемы с кодировкой, вы можете изменить utf-8 на 16, 32 и т. Д.
Для этого есть несколько решений. Вы можете использовать встроенную
.json()
функцию запроса :Или вы можете выбрать распознавание символов через
chardet
. Chardet - это библиотека, разработанная на основе исследования. Библиотека имеет одну функцию:detect
. Detect может обнаруживать наиболее распространенные кодировки, а затем использовать их для кодирования вашей строки с помощью.import chardet json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))
источник
Пусть запросы расшифруют это за вас:
Это проверит заголовки (Content-Type) и кодировку ответа, автоматически определив, как правильно декодировать контент.
источник
python3.6 + делает это автоматически. поэтому ваш код не должен возвращать ошибку в python3.6 +
что нового в python3.6
источник