Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Ошибка “JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig)” при попытке десериализации JSON

#python #json #utf_8


Есть простая функция: 

def get_nbu():
    URL = 'https://api.buh.privatbank.ua/ratenbu.php?year=1993'
    r = requests.get(URL)
    date = r.json()   #<--- json.decoder.JSONDecodeError
    return date


При попытке преобразовать полученный ответ в JSON получаю ошибку: Unexpected UTF-8
BOM (decode using utf-8-sig).
Я нашел способы декодирования из файла но не могу найти решения для декодирования
резултата GET-запроса (переменной). Как это решается?
    


Ответы

Ответ 1



Что-то в Приватбанке накосячили, т.к. в начале строки аж 3 сивмола BOM: In [79]: r.text Out[79]: '\ufeff\ufeff\ufeff[{"rate_date":"01.05.1993","rate_value":"240"},{"rate_date":"01.03.1993","rate_value":"100"}]' поэтому самым простым представляется такой "костыль": In [81]: r.text.lstrip('\ufeff') Out[81]: '[{"rate_date":"01.05.1993","rate_value":"240"},{"rate_date":"01.03.1993","rate_value":"100"}]' In [82]: import json In [83]: items = json.loads(r.text.lstrip('\ufeff')) In [84]: items Out[84]: [{'rate_date': '01.05.1993', 'rate_value': '240'}, {'rate_date': '01.03.1993', 'rate_value': '100'}]

Комментариев нет:

Отправить комментарий