Metlivi 博客

如何在不修改内容的前提下离线读取 Day One 的 JSON 导出文件

要检查 Day One 的导出内容,请保持下载的 ZIP 文件不变,单独制作一份工作副本,在本地解压,并使用文本编辑器或 Python 的标准 JSON 工具打开 `.json` 文件。ZIP 是容器;JSON 是结构化文本;任何媒体文件夹都存放着独立的文件。你可以检查 JSON 语法是否有效,并定位候选的文本、日期或附件数值,而无需主观臆测未记录键名的含义。单凭可读的 JSON 并不足以证明每个媒体文件都完整存在,也无法证明该归档可以被成功恢复。

2026年9月30日4 分钟阅读生活美学与自我表达作者:Metlivi Editorial Team
第 1 节

首先区分 ZIP、JSON 与媒体文件

Day One 将其 JSON 导出描述为一个包含所选条目 `.json` 文件的 ZIP 压缩包;照片、视频、音频和 PDF 等媒体内容可能包含在单独的文件夹中。官方指南说明 JSON 旨在用于重新导入归档数据,可由 Day One 及支持 Day One JSON 格式的应用程序读取。[Day One 的导出指南](https://dayoneapp.com/guides/tips-and-tutorials/exporting-entries/)并未定义完整的逐字段模式(schema),因此切勿仅因某个文件名或键名看起来眼熟就断定其确切含义。

请保持原始 ZIP 文件完整不变。使用操作系统的解压工具将副本解压到新的本地文件夹中。切勿将个人日记上传到在线格式化工具。在打开或移动文件之前,请注意归档中是包含一个还是多个 JSON 文件,或是包含媒体文件夹;具体内容取决于导出时的设置。像打开 JSON 一样去直接打开 `.zip` 文件会导致失败,因为 ZIP 属于完全不同的文件格式。

第 2 节

在本地检查 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`

在命令中指定已解压文件的路径,仅当你需要一份单独的美化排版(pretty-printed)副本时,才将输出重定向到新文件。解析成功时,该命令会输出格式化后的 JSON;若解析失败,Python 会报告错误所在的位置。解析成功仅意味着该文本对解析器而言是有效的 JSON,并不代表文件内容完整、其数值符合你的预期含义,或者 Day One 一定能导入它。[Python 的 `json` 文档](https://docs.python.org/3/library/json.html)还介绍了用于读取文件或字符串的 `json.load()` 和 `json.loads()`。

第 3 节

理清文档的实际结构

从第一个非空白字符开始观察。开头的 `{` 表示一个对象;`[` 表示一个数组。在格式化后的副本中,展开最外层并检查成员名称及数值类型。数组中可能包含对象;这些对象内部可能又嵌套了数组或对象。重复出现的对象结构有助于识别候选的日记条目记录,但单纯的结构重复并不能证明导出程序预设的数据模式。

在文本中搜索你确定出现在某篇日记中的短语,然后仔细检查其周围的大括号和数值。在数值旁记录其准确的键名,而不要凭猜想去重命名。一个看似日期的数值可能是候选日期;一段类似于路径的字符串可能是候选附件引用。在 Day One 官方文档或导出文件自身的上下文证实其含义之前,应将两者均视为未确定项。在笔记中请完整保留原始的大小写拼写、标点符号、转义序列以及数值类型。

第 4 节

审慎解读转义字符和媒体引用

JSON 字符串内部显式出现的 `\\n` 等序列代表转义换行符;它在原始日记条目中并不一定是两个独立的字符。引号和反斜杠同样会被转义。解析器可以将“Line one\nLine two”直接显示为包含换行的字符串,而 JSON 文本则使用 `\\n` 对该换行进行编码。建议在阅读器或解析器中对比查看数值,不要直接修改源文件。

如果某个数值类似于媒体文件名或相对路径,请检查解压出的媒体文件夹中是否存在对应的文件。将准确的引用内容和匹配结果作为客观观察记录下来,但这不能直接证明该引用能在 Day One 中正确解析关联。未能找到匹配项可能是由于导出选项、命名差异或字段本身无法确定的其他细节所致。请将所有核对清单与原始导出文件分开放置。

第 5 节

使用检查记录表,切忌臆测字段名称

制作一份简明的小表格可以让不确定性清晰呈现,并方便他人复现你的核对过程:

例如,一个通用的 JSON 对象可能包含 `{\"text\":\"A note\",\"date\":\"2024-05-06\",\"attachment\":\"photos/example.jpg\"}`。这些仅为用于说明的示例名称和数值,并不代表 Day One 的真实数据模式。在记录中请保持原始数值不变;切勿擅自转换日期格式、凭空推测路径含义或删除不熟悉的成员。

容器内容:解压后存在的具体文件名和文件夹
JSON 结构:观察到的顶层类型及嵌套层级
候选数值:准确的键名、数值类型及简短摘录
潜在含义:“候选文本/日期/附件”;标注为未验证
相关媒体:准确路径以及是否找到了相匹配的文件
第 6 节

明确检查过程无法证明的事项

语法有效并不等同于导出文件包含了所有勾选的条目或预期的媒体文件。看到候选附件数值不能证明被引用的文件确实存在,找到同名文件也无法确认其实际的导入行为。Day One 的指南将 JSON 定义为一种归档与重新导入格式,但只读检查绝不能替代恢复测试。如果你需要确保数据的可移植性或可恢复性,请查阅 Day One 最新的官方说明,并在安全的工作副本上单独执行导入测试,切勿改动原始导出文件。

相关阅读

继续探索这个主题