Shanraq.org Shanraq.org
Сохранение задач в JSON
Общество

Информатика: создаём своего цифрового помощника Урок 35 из 38

Сохранение задач в JSON

Сохраним задачи в JSON, явно перейдём от формата 0.2 к 1.0 и убедимся, что казахский текст переживает закрытие программы.

Где мы на карте

Это урок 35 из 72 и часть блока Python (уроки 27–38). Опорная схема показывает проверяемые переходы. Продолжаем бумажный договор версии 0.3: пять исходов напоминания и исходные вымышленные задачи.

Сохранение задач в JSON

Ситуация и вопрос

До сих пор done=True исчезал после закрытия программы. Теперь нужен файл, но запись может оборваться, а старые задачи ещё не имеют даты. Если просто добавить поле и сказать, что так было всегда, ученик не заметит смены договора. Сравним оба формата и проведём запись, повторное чтение и проверку.

Новые слова без пропусков

JSON — текстовый формат с объектами, массивами, строками, числами, true, false и null. В Python им соответствуют словарь, список, str, числа, True, False, None. Сериализация переводит структуру Python в текст JSON через json.dump или json.dumps; разбор делает обратное через json.load. Версия схемы сообщает, какие поля допустимы. В 0.2 срока нет; в 1.0 due_date хранит ISO-дату либо null. Атомарная замена записывает новый файл во временный соседний файл и затем заменяет старый; это уменьшает риск частичной записи, но не заменяет резервную копию.

Опорный сигнал

Вход → проверка правила → изменение состояния → наблюдаемый результат. Покажите пальцем, на каком шаге программа читает данные, где сравнивает их с договором и где только сообщает результат. Если шага не видно на схеме, найдите его в коде и добавьте в собственную трассу.

Разбираем шаг за шагом

Запустите короткий пример с названием «Әліппе оқу»: ensure_ascii=False оставляет букву читаемой в тексте JSON. json.loads возвращает структуру, а проверка заголовка подтверждает круговой переход. Затем откройте прежний step-01/data/tasks.json: там три задачи и версия 0.2. В рабочую копию запишите те же три id, названия и done, смените версию на 1.0 и задайте каждой due_date: реальную вымышленную дату или null. Не придумывайте дату для старой записи без требования.

Предскажите и проверьте

Закройте блок с выводом. По строкам проследите значения имён и напишите точный ожидаемый текст, включая регистр и порядок строк. Только затем выполните код из каталога step-03 командой python3 и сравните посимвольно. Поменяйте один вход; до запуска запишите новый прогноз. Если результат отличается, найдите первую строку расхождения, а не подгоняйте ответ задним числом.

import json
item = {"title": "Әліппе оқу", "done": False}
encoded = json.dumps(item, ensure_ascii=False)
print(encoded)
print(json.loads(encoded)["title"])

Ожидаемый вывод

{"title": "Әліппе оқу", "done": false}
Әліппе оқу

Поймайте ошибку

Переименование tasks.txt в tasks.json не делает содержимое правильным JSON. Одинарные кавычки и True внутри файла тоже неверны для JSON: там нужны двойные кавычки и true. Проверяйте чтение через json.load, структуру полей и повторное чтение после записи, а не только расширение имени.

Изменение проекта

Функция load_document сначала проверяет весь файл, затем отдаёт данные. save_document пишет только проверенную версию 1.0 во временный файл и заменяет целевой. Старую 0.2 можно читать, но изменение явно переводит её в 1.0.

Задание и доказательство

Скопируйте исходный файл 0.2, запустите на копии add с новым id и сроком, потом list и reminders --today 2026-10-09. Сравните три старые записи побуквенно по id, title, done: они должны сохраниться. У старых срок null; у новой записи — ваша дата. Повторно откройте файл программой и проверьте, что вывод не изменился.

Перенос в новую ситуацию

У школьного клуба появился новый столбец «аудитория». Можно ли незаметно считать, что все старые встречи были в кабинете 101? Объясните, чем null честнее выдуманного кабинета и когда нужна новая версия формата.

Возврат через 1, 7 и 30 дней

Через 1 день восстановите правило и один граничный пример без страницы. Через 7 дней объясните ошибку в новом примере однокласснику. Через 30 дней повторите тест проекта, проверьте, что прежние записи и вывод сохранились, и снова перенесите правило на другую задачу.

Следующий урок

Далее: Ошибка как наблюдаемый факт

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить доказательство проекта

Запишите наблюдение, объяснение, исправление ошибки и изменение своего проекта. Модель укажет первую перепутанную или недоказанную связь, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.