Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Статья является приложением к уроку
Формат json и стандартная библиотека поддержки Python
json (JavaScript Object Notation) — широко используемый язык описания структуры данных. Популярность его обусловлена простотой и наличием поддержки в разных языках программирования. Поскольку описание представляет собой обычный текстовый файл или просто строка, то им удобно пользоваться для передачи данных, для хранения в обычных текстовых файлах или же в базе данных.
Основу языка json составляют два типа данных: object (объект) и array (массив). Кроме того есть не большой набор типов данных.
Удобно рассмотреть таблицу преобразования структур Python в json и обратно (см. ниже).
Глядя на таблицу, выделим несколько важных моментов:
- Словари Python преобразуются в object и обратно. Эта структура Python наиболее адекватно подходит для преобразования в формат json.
- Кортеж как и список преобразуется в array. При обратном преобразовании array преобразуется в список. Т.е. при обратном преобразовании кортеж, если он был теряется. С точки зрения программирования это не так уж и важно, но иметь это в виду следует.
- В списке отсутствует такая структура как множество. Этот вид коллекций не имеет аналогов в json. И это нужно иметь и не использовать данные в множествах, если предполагается использование json.
В остальном на первый взгляд соответствие полное. Однако ниже мы увидим, что и здесь есть нюансы. Библиотека поддержки json подключается обычной командой import.
Результат выполнения программы
[{"nmb": 8.111111111111, "name": "Petrov"}, {"Q": "qwerty"}]
[{'nmb': 8.111111111111, 'name': 'Petrov'}, {'Q': 'qwerty'}]
8.111111111111 qwerty
Первая строка это как раз в чистом json. Затем производится обратное преобразование и мы видим, что получаем почти точный исходный результат. Именно "почти" так как кавычки теперь все одинарные. Конечно, то не слишком важно, но иметь это в виду следует.
Проведём два эксперимента
1. Напишем фамилию кириллицей: "name": "Петров". Получим.
[{"nmb": 8.111111111111, "name": "\u041f\u0435\u0442\u0440\u043e\u0432"}, {"Q": "qwerty"}]
[{'nmb': 8.111111111111, 'name': 'Петров'}, {'Q': 'qwerty'}]
8.111111111111 qwerty
Мы видим, что кириллические буквы были заменены были заменены кодами в Unicode. Но заметим, что это никак не повлияло на обратное преобразование.
2. Вернемся снова к латинице, но заменим один из ключей словаря на число.
Результат выполнения
[{"1": 8.111111111111, "name": "Petrov"}, {"Q": "qwerty"}]
[{'1': 8.111111111111, 'name': 'Petrov'}, {'Q': 'qwerty'}]
8.111111111111 qwerty
Мы видим, что числовой ключ превратился в строковый. И это уже серьёзно. Возьмём и это на вооружение.
В программах выше структура Python преобразовывалась в строку json. Но можно оперировать и файлами.
Программа берёт структуру json из файла преобразуя в структуру Python, а потом снова преобразует эту структуру в json и сохраняет в другом файле. На консоль программа выводит
Букашкин
Это просто проверка, что преобразование в структуру Python произведено верно.
Содержимое файла data.json
{"Глава компании":
{"name": "Букашкин",
"национальность": "бабуин"}
}
Кстати перевод строки (или отступы) в тексте не играет никакой роли в преобразовании.
Содержимое файла data2.json
{"Глава компании": {"name": "Букашкин", "национальность": "бабуин"}}
Мы видим, что получили в сущности тот же json текст (о переводе строки я уже сказал).
Обращу внимание на следующие моменты.
- Открытие файлов для чтения и записи производится обычным известным нам способом. Но чтение и запись осуществляется методами библиотеки json.
- ensure_ascii=False указывает, что в json следует использовать символы. а не Unicode. Попробуйте использовать ensure_ascii=True и посмотрите, что получится.
Замечание
Процесс преобразование объектов программы в некоторую последовательность байтов, например в текст, обычно называют термином "сериализация".
Мы не закончили своё изложение по поддержке формата json в языке Python. В следующем приложении (Приложение 2) к уроку мы подробнее рассмотрим саму библиотеку json и некоторые сложности преобразования.
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.