How to Read a Day One JSON Export Offline Without Changing It
To inspect a Day One export, keep the downloaded ZIP unchanged, make a separate working copy, extract it locally, and open the `.json` file with a text editor or Python’s standard JSON tools. The ZIP is a container; the JSON is structured text; any media folders hold separate files. You can check whether JSON syntax is valid and locate candidate text, date, or attachment values without assuming what undocumented keys mean. Readable JSON alone does not show that every media file is present or that the archive can be restored.
First distinguish the ZIP, JSON, and media
Day One describes its JSON export as a ZIP containing a `.json` file with selected entries; media can be included in folders for photos, videos, audio, and PDFs. The guide says JSON is intended for reimporting archived data and can be read by Day One and apps supporting Day One JSON files. [Day One’s export guide](https://dayoneapp.com/guides/tips-and-tutorials/exporting-entries/) does not define a complete field-by-field schema, so do not treat a familiar-looking filename or key as proof of its meaning.
Keep the original ZIP untouched. Use your operating system’s archive tool to extract a copy into a new local folder. Avoid uploading a personal journal to an online formatter. Before opening or moving files, note whether the archive contains one JSON file, more than one, or media folders; the exact contents depend on export choices. Opening a `.zip` as though it were JSON will fail because the ZIP is a different file format.
Check the JSON syntax locally
A JSON document is text describing structured values. The top level may be an object, array, or another valid JSON value; JSON objects contain named members, while arrays contain ordered values. Strings use double quotes, and commas, colons, and brackets must follow JSON syntax. [MDN’s JSON guide](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/JSON) explains these structures and common syntax restrictions.
For a quick local check and readable indentation, Python documents this command-line form:
`python3 -m json.tool < journal.json`
Use the command with the path to your extracted file, and redirect output to a new file only if you want a separate pretty-printed copy. The command prints formatted JSON when parsing succeeds; if parsing fails, Python reports an error location. A successful parse means the text is valid JSON for the parser. It does not establish that the file is complete, that its values have the meanings you expect, or that Day One can import it. [Python’s `json` documentation](https://docs.python.org/3/library/json.html) also documents `json.load()` and `json.loads()` for reading a file or string.
Find the document’s actual shape
Start at the first non-whitespace character. An opening `{` indicates an object; `[` indicates an array. In a formatted copy, expand the outer level and inspect member names and value types. Arrays may contain objects; those objects may contain arrays or nested objects. Repeated object shapes can help you find candidate entry records, but repetition alone does not prove the exporter’s intended schema.
Search the text for a phrase you know appears in an entry, then inspect the surrounding braces and values. Record the exact key beside the value rather than renaming it based on a guess. A value that looks like a date may be a candidate date; a string that resembles a path may be a candidate attachment reference. Treat both as unresolved until Day One documentation or the export’s own context confirms their meaning. Preserve original spelling, punctuation, escape sequences, and value types in your notes.
Interpret escapes and media references cautiously
A visible sequence such as `\n` inside a JSON string represents an escaped newline; it is not necessarily two characters in the original entry. Quotes and backslashes are escaped too. A parser can display “Line one Line two” as a string containing a line break, while the JSON text encodes that break with `\n`. Compare values in a reader or parser without editing the source file.
If a value resembles a media filename or relative path, check whether a corresponding file exists in the extracted media folders. Record the exact reference and match as an observation, not proof that the reference resolves correctly in Day One. A missing match could reflect export options, naming differences, or other details not established by the field alone. Keep any inventory separate from the original export.
Use an inspection record, not guessed field names
A small table makes uncertainty explicit and helps another person repeat your review:
For example, a generic JSON object might contain `{"text":"A note","date":"2024-05-06","attachment":"photos/example.jpg"}`. These are illustrative names and values only, not a statement about Day One’s schema. Keep the original value unchanged in your notes; avoid converting date formats, resolving paths by guesswork, or deleting unfamiliar members.
Know what inspection cannot establish
Valid syntax does not prove the export includes every selected entry or intended media file. Seeing a candidate attachment value does not prove the referenced file is present, and finding a similarly named file does not confirm import behavior. Day One’s guide identifies JSON as an archival and reimport format, but a read-only inspection is not a restore test. If you need assurance about portability or recovery, consult current Day One instructions and perform any import check separately on a safe copy, preserving the untouched export.
