Чтобы получить файл в в utf8, а не в в ascii, в принятом ответе для Python 2 используйте:
import io, json with io.open('data.txt', 'w', encoding='utf-8') as f: f.write(json.dumps(data, ensure_ascii=False))
В Python 3 код проще:
import json withopen('data.txt', 'w') as f: json.dump(data, f, ensure_ascii=False)
В Windows по-прежнему необходим encoding='utf-8' аргумент to open.
Чтобы избежать хранения закодированной копии данных в памяти (результат dumps) и выводить байтовые строки в кодировке utf8 как в Python 2, так и в Python 3, используйте:
import json, codecs withopen('data.txt', 'wb') as f: json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)
codecs.getwriter Вызов избыточен в Python 3, но необходим для Python 2
Удобочитаемость и размер:
Использование ensure_ascii=False обеспечивает лучшую читабельность и меньший размер:
Еще больше улучшите читаемость, добавив флаги indent=4, sort_keys=True (как предложено dinos66) к аргументам dump или dumps. Таким образом, вы получите упорядоченную структуру json с хорошим отступом за счет немного большего размера файла.
Ответ 3
Я бы ответил с небольшими изменениями вышеупомянутыми ответами, а именно написать улучшенный файл JSON, который человеческий глаз может читать лучше. Для этого передайте sort_keys как True и indent с 4 пробелами, и все готово. Также позаботьтесь о том, чтобы коды ascii не были записаны в ваш JSON-файл: