Day OneのJSONエクスポートを変更せずにオフラインで読み取る方法
Day Oneのエクスポートを検査するには、ダウンロードしたZIPを変更せずに保持し、別途作業用コピーを作成してローカルに解凍した上で、テキストエディタまたはPythonの標準JSONツールで`.json`ファイルを開きます。ZIPはコンテナであり、JSONは構造化テキスト、メディアフォルダには個別のファイルが格納されています。ドキュメント化されていないキーの意味を決めつけることなく、JSON構文が有効かどうかを確認し、テキスト、日付、添付ファイルなどの候補となる値を見つけることができます。JSONが読み取れることだけでは、すべてのメディアファイルが存在することや、アーカイブが復元可能であることを示すわけではありません。
まず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/)には完全なフィールドごとのスキーマは定義されていないため、見覚えのあるファイル名やキーであっても、その意味を断定してはいけません。
元のZIPには手を加えないでください。オペレーティングシステムのアーカイブツールを使用して、新しいローカルフォルダにコピーを展開します。個人の日記をオンラインのフォーマッターにアップロードすることは避けてください。ファイルを開いたり移動したりする前に、アーカイブに1つのJSONファイルが含まれているか、複数あるか、あるいはメディアフォルダが含まれているかを確認してください。実際の内容はエクスポート時の選択によって異なります。ZIPは異なるファイル形式であるため、`.zip`をJSONとして開こうとすると失敗します。
ローカルで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のドキュメントまたはエクスポート自体のコンテキストによってその意味が確認されるまでは、どちらも未確定として扱ってください。メモには元のスペル、句読点、エスケープシーケンス、値の型をそのまま保持します。
エスケープやメディア参照の解釈は慎重に行う
JSON文字列内の`\\n`などの可視シーケンスはエスケープされた改行を表しており、元のエントリーで必ずしも2文字であったとは限りません。引用符やバックスラッシュもエスケープされます。パーサーは「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の手順を確認し、元のエクスポートを保護したまま、安全なコピーに対して別途インポート確認を行ってください。
