Принуждение модуля 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 только при работе в качестве задания cron
  • Поиск символов Юникода в Python
  • Работа с ключами unicode в словаре python
  • Строка Python печатает как
  • Преобразование символа в его четырехзначное представление unicode escape и наоборот
  • Преобразование unicode с помощью строки utf-8 в качестве содержимого для str
  • эффективно заменить плохие символы
  • python: unicode в терминале Windows, используется кодировка?
  • Python - лучший язык программирования в мире.