Принуждение модуля Python json к работе с ASCII

Я использую json.dump () и json.load () для сохранения / чтения словаря строк на / с диска. Проблема в том, что я не могу иметь ни одной строки в unicode. Кажется, что они находятся в юникоде независимо от того, как я устанавливаю параметры для дампа / загрузки (включая security_ascii и кодировку).

2 Solutions collect form web for “Принуждение модуля Python json к работе с ASCII”

Если вы просто имеете дело с простыми объектами JSON, вы можете использовать следующее:

 def ascii_encode_dict(data): ascii_encode = lambda x: x.encode('ascii') return dict(map(ascii_encode, pair) for pair in data.items()) json.loads(json_data, object_hook=ascii_encode_dict) 

Вот пример того, как это работает:

 >>> json_data = '{"foo": "bar", "bar": "baz"}' >>> json.loads(json_data) # old call gives unicode {u'foo': u'bar', u'bar': u'baz'} >>> json.loads(json_data, object_hook=ascii_encode_dict) # new call gives str {'foo': 'bar', 'bar': 'baz'} 

Этот ответ работает на более сложную структуру JSON и дает некоторое приятное объяснение по параметру object_hook . Там также есть другой ответ, который рекурсивно берет результат json.loads() и преобразует все строки Unicode в байтовые строки.

И если json-объект представляет собой сочетание типов данных, а не только строк unicode, вы можете использовать это выражение:

 def ascii_encode_dict(data): ascii_encode = lambda x: x.encode('ascii') if isinstance(x, unicode) else x return dict(map(ascii_encode, pair) for pair in data.items()) 
  • UnicodeEncodeError: кодек ascii не может кодировать символ u '\ xa0' в позиции 20: порядковый номер не в диапазоне (128)
  • Проблемы с кодировкой Python и BeautifulSoup
  • Лучший способ конвертировать URL-адрес Unicode в ASCII (UTF-8-escaped) в Python?
  • кодирование python utf-8
  • Как указать диапазон символов Unicode в регулярном выражении в python?
  • Python Unicode, имеет номер юникода в обычной строке, хочет печатать unicode
  • Как использовать шаблон контента типа Django и UTF-8 для шаблона?
  • Выровнять текст юникода в окне терминала, используя шрифт моноширин по умолчанию
  • Python - лучший язык программирования в мире.