Как читать офлайн JSON-экспорт из Day One, не изменяя его
Чтобы изучить экспорт из Day One, сохраните загруженный ZIP-архив без изменений, сделайте отдельную рабочую копию, распакуйте ее локально и откройте файл `.json` в текстовом редакторе или с помощью стандартных инструментов Python для работы с JSON. ZIP — это контейнер, JSON — структурированный текст, а в папках с медиафайлами хранятся отдельные файлы. Вы можете проверить корректность синтаксиса JSON и найти возможные фрагменты текста, даты или значения вложений, не строя догадок о значении недокументированных ключей. Сам по себе читаемый JSON не гарантирует наличие каждого медиафайла и возможность полного восстановления архива.
Сначала разграничьте ZIP, JSON и медиафайлы
Day One описывает свой JSON-экспорт как ZIP-архив, содержащий файл `.json` с выбранными записями; медиафайлы могут включаться в папки для фотографий, видео, аудио и PDF. В руководстве указано, что JSON предназначен для повторного импорта архивированных данных и может читаться приложением Day One, а также программами, поддерживающими файлы JSON от Day One. В [руководстве по экспорту Day One](https://dayoneapp.com/guides/tips-and-tutorials/exporting-entries/) нет полного описания структуры каждого поля, поэтому не стоит считать знакомое имя файла или ключ подтверждением их назначения.
Оставьте исходный ZIP-архив нетронутым. С помощью архиватора вашей операционной системы распакуйте копию в новую локальную папку. Не загружайте личный дневник в онлайн-форматтеры. Перед открытием или перемещением файлов обратите внимание на то, содержит ли архив один файл JSON, несколько таких файлов или папки с медиафайлами; точный состав зависит от выбранных параметров экспорта. Попытка открыть `.zip` как файл JSON завершится ошибкой, поскольку ZIP представляет собой другой формат файлов.
Проверьте синтаксис JSON локально
JSON-документ — это текст, описывающий структурированные значения. На верхнем уровне может находиться объект, массив или другое допустимое значение JSON; объекты JSON содержат именованные элементы, а массивы — упорядоченные значения. Строки заключаются в двойные кавычки, а запятые, двоеточия и скобки должны строго следовать синтаксису JSON. В [руководстве MDN по JSON](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/JSON) объясняются эти структуры и стандартные синтаксические ограничения.
Для быстрой локальной проверки и формирования удобных отступов в документации Python приводится следующая команда:
`python3 -m json.tool < journal.json`
Используйте эту команду, указав путь к распакованному файлу, и перенаправляйте вывод в новый файл только в том случае, если вам нужна отдельная красиво отформатированная копия. При успешном разборе команда выводит отформатированный JSON; в случае сбоя Python сообщает позицию ошибки. Успешный парсинг означает лишь то, что текст является синтаксически корректным JSON с точки зрения парсера. Это не доказывает, что файл полон, что его значения имеют ожидаемый вами смысл или что Day One сможет его импортировать. В [документации Python по модулю `json`](https://docs.python.org/3/library/json.html) также описаны функции `json.load()` и `json.loads()` для чтения из файла или строки.
Определите реальную структуру документа
Начните с первого непробельного символа. Открывающая фигурная скобка `{` указывает на объект, а квадратная `[` — на массив. В отформатированной копии раскройте внешний уровень и изучите имена элементов и типы значений. Массивы могут содержать объекты, а те, в свою очередь, — другие массивы или вложенные объекты. Повторяющиеся структуры объектов помогают выявить потенциальные записи журнала, однако само по себе повторение не доказывает исходную схему экспортера.
Найдите в тексте фразу, которая точно есть в одной из записей, а затем изучите окружающие ее скобки и значения. Записывайте точный ключ рядом со значением вместо того, чтобы переименовывать его на основе догадок. Значение, похожее на дату, может оказаться потенциальной датой; строка, напоминающая путь к файлу, — возможной ссылкой на вложение. Считайте и то, и другое неподтвержденным, пока документация Day One или контекст самого экспорта не подтвердят их назначение. Сохраняйте в своих заметках исходное написание, пунктуацию, escape-последовательности и типы значений.
Интерпретируйте escape-символы и ссылки на медиафайлы с осторожностью
Отображаемая последовательность вроде `\\n` внутри строки JSON представляет собой экранированный перенос строки; это вовсе не обязательно два отдельных символа в исходной записи. Кавычки и обратные косые черты также экранируются. Парсер может отобразить «Line one\nLine two» как строку с переносом, в то время как в исходном тексте JSON этот перенос закодирован как `\\n`. Сравнивайте значения в программе просмотра или через парсер, не редактируя исходный файл.
Если значение напоминает имя медиафайла или относительный путь, проверьте, существует ли соответствующий файл в распакованных папках с медиа. Зафиксируйте точную ссылку и совпадение как наблюдение, а не как доказательство того, что Day One обработает эту ссылку корректно. Отсутствие совпадения может объясняться параметрами экспорта, различиями в именовании или другими факторами, которые нельзя однозначно определить лишь по одному полю. Храните любые описи отдельно от исходного экспорта.
Ведите журнал проверки, а не угадывайте имена полей
Небольшая таблица наглядно отражает неопределенность и помогает другому человеку повторить ваш анализ:
Например, стандартный объект JSON может выглядеть так: `{\"text\":\"A note\",\"date\":\"2024-05-06\",\"attachment\":\"photos/example.jpg\"}`. Это исключительно иллюстративные имена и значения, а не утверждение о структуре Day One. Оставляйте исходное значение в своих записях без изменений; избегайте конвертации форматов дат, угадывания путей к файлам или удаления незнакомых полей.
Понимайте границы возможностей визуальной проверки
Корректный синтаксис не доказывает, что экспорт включает все выбранные записи или нужные медиафайлы. Наличие возможного значения вложения не подтверждает присутствие самого файла, а обнаружение файла со схожим именем не гарантирует его корректный импорт. Руководство Day One определяет JSON как формат для архивации и повторного импорта, однако просмотр без редактирования не является тестом на восстановление данных. Если вам нужна уверенность в переносимости или возможности восстановления, сверьтесь с актуальными инструкциями Day One и проводите любые проверки импорта отдельно на безопасной копии, оставив исходный экспорт нетронутым.
