Продвинутый курс разработки на Python
Глава
>
Уровень

Модули сериализации
Модуль JSON

Цель

Отправляйтесь на сервисную станцию и убедитесь, что данные правильно сохраняются с помощью модуля JSON для форматирования файлов.

Южнее пристройки в зоне нового строительства находится сервисная станция: весь этот район будет перестроен для возделывания сельскохозяйственных культур. На станции есть несколько терминалов, обрабатывающих данные для новой застройки; мы могли бы вводить данные вручную, но это заняло бы слишком много времени. Для обработки данных мы можем использовать JSON (JavaScript Object Notation) — формат данных, независимый от языков программирования, который хранит информацию в удобном для чтения виде и подходит для хранения и передачи данных.

Чтобы работать с JSON в Python, мы можем использовать import json, который даст нам доступ к функциям JSON. Для наших целей мы будем использовать следующие функции:

  • json.loads(): преобразует JSON-строку в Python-объект; принимает один аргумент — строку, которую нужно разобрать.
  • json.dumps(): преобразует Python-объект в JSON-строку; эта функция может принимать до четырёх аргументов, при этом обязательным является только первый. Они следующие:
    1. Python-объект, который нужно конвертировать в JSON: может быть одним из следующих типов данных: словари, списки, кортежи, строки, целые числа, числа с плавающей точкой, логические значения и None.
    2. indent: количество пробелов для отступов.
    3. separators: это символы, которые будут использоваться между элементами и/или в конце.
    4. 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 для сохранения и отображения отсортированных данных и завершения уровня.

Книга Кода