Продвинутый курс разработки на Python
Глава
>
Уровень
Модули сериализации
Модуль JSON
Цель
Отправляйтесь на сервисную станцию и убедитесь, что данные правильно сохраняются с помощью модуля JSON для форматирования файлов.
Южнее пристройки в зоне нового строительства находится сервисная станция: весь этот район будет перестроен для возделывания сельскохозяйственных культур. На станции есть несколько терминалов, обрабатывающих данные для новой застройки; мы могли бы вводить данные вручную, но это заняло бы слишком много времени. Для обработки данных мы можем использовать JSON (JavaScript Object Notation) — формат данных, независимый от языков программирования, который хранит информацию в удобном для чтения виде и подходит для хранения и передачи данных.
Чтобы работать с JSON в Python, мы можем использовать import json, который даст нам доступ к функциям JSON. Для наших целей мы будем использовать следующие функции:
json.loads(): преобразует JSON-строку в Python-объект; принимает один аргумент — строку, которую нужно разобрать.json.dumps(): преобразует Python-объект в JSON-строку; эта функция может принимать до четырёх аргументов, при этом обязательным является только первый. Они следующие:- Python-объект, который нужно конвертировать в JSON: может быть одним из следующих типов данных: словари, списки, кортежи, строки, целые числа, числа с плавающей точкой, логические значения и None.
indent: количество пробелов для отступов.separators: это символы, которые будут использоваться между элементами и/или в конце.sort_keys: если вы конвертируете словарь, сортирует ключи по алфавиту.
Чтобы начать, отправляйтесь к золотому X-у на аванпосту слева и встаньте лицом к столу с памяткой. Используйте функцию read(), чтобы проверить необходимую информацию для подтверждения статуса терминала, и зафиксируйте её. Затем пройдите к светлому X-у перед терминалом. Там есть константа transmission — используйте json.dumps(), чтобы отформатировать её в JSON, например так: transmission = json.dumps(transmission).
Создайте словарь с именем load и сохраните в нём значение json.loads() с константой transmission в качестве аргумента. Это преобразует JSON в Python-объект, чтобы к информации было легко обратиться. Используйте функцию speak() с ключами, указанными в памятке, и созданным вами словарём load. Например: player.speak(load["system"]). Повторите это для всех ключей.
После проверки информации на терминале пройдите вниз к станции, войдите внутрь и направьтесь к светлому X-у над зелёным ковром. Используйте функцию read(), чтобы проверить памятку и зафиксировать значения. В редакторе уже есть заготовленный словарь profile; заполните отсутствующие значения данными из памятки.
Пройдите к тёмному X-у над зелёным ковром, встаньте перед терминалом, создайте переменную transfer и сохраните в ней результат json.dumps(), используя словарь profile в качестве единственного аргумента. Таким образом мы преобразуем словарь в JSON-строку. Используйте предопределённую функцию display() и передайте ей transfer для записи данных в терминал.
Пройдите к тёмному X-у над красным ковром и используйте функцию read(), чтобы проверить данные, уже введённые в терминал. Данные представлены в неправильном формате, поэтому для корректного хранения их необходимо отформатировать в JSON. Данные находятся в константе-словаре red_data; создайте переменную red_storage и сохраните в ней результат работы функции json.dumps().
Чтобы отформатировать данные, добавьте к функции следующие аргументы: red_data для конвертации константы в JSON, indent, равный 5 для форматирования текста, и separators, равный ("- ", " = ") для добавления этих символов в конце каждой строки. Строка должна выглядеть так: red_storage = json.dumps(red_data, indent=5, separators=("- ", " = ")). Используйте предопределённую функцию display() и передайте ей JSON-строку red_storage для сохранения и отображения отформатированных данных.
Пройдите к тёмному X-у над синим ковром, встаньте перед терминалом и используйте функцию read(). Как и раньше, данные хранятся неправильно и требуют форматирования, а также сортировки. Данные находятся в константе blue_data; создайте переменную blue_storage и сохраните в ней результат работы функции json.dumps().
В качестве аргументов добавьте: blue_data для конвертации константы в JSON, indent, равный 4 для форматирования текста, и separators, равный (".0", " = "), для добавления этих символов в конце каждой строки. Кроме того, добавьте аргумент sort_keys в качестве последнего и установите его в True, например: sort_keys=True. Используйте предопределённую функцию display() и передайте ей JSON-строку blue_storage для сохранения и отображения отсортированных данных и завершения уровня.