Если вы просто имеете дело с простыми объектами 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 в строки байтов.