Ошибка JSON - JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig)
Нужно считать JSON файл. Выдается ошибка json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0)
Так выглядит сам код:
def getJSON(self):
json_file = 'http://192.168.31.194:8000/static/files/09IPL.json'
res_json = requests.get(json_file).text
return res_json
def jsonParse(self):
res_json = self.getJSON()
data = json.loads(res_json)
return res_json
JSON файл вида:
{"Название": [
{
"Физлицо": "ФИО",
"Подразделение": "подразделение",
"Должность": "должность"
}]}
Ответы (2 шт):
Если сайт действительно отдаёт json, то не нужно его преобразовывать вручную, берите сразу готовый json, тем более в хедерах и т.д. наверняка была указана кодировка, а вы, взяв от сайта только .text всю эту информацию отрезали:
res_json = requests.get(json_file).json()
^^^^^^^
Хотя бывает, что это тоже не работает, и тогда кодировку нужно угадывать.
Буквально ошибка говорит о том, что в строке встретился UTF-8 BOM маркер (byte order mark - маркер порядка байт), и нужно было декодировать (пришедшие с сервера) байты с помощью кодировки utf-8-sig (utf-8 с учетом BOM).
В данном случае нужно принудительно указать кодировку в ответе сервера, потом уже доставать текст:
result = requests.get(json_file)
result.encoding = 'utf-8-sig'
res_json = result.text
Также можно сразу декодировать json без отдельного json.loads:
result = requests.get(json_file)
result.encoding = 'utf-8-sig'
res_json = result.json()