TOML を NDJSON に変換

ここで TOML を NDJSON に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 変換はお使いのブラウザーの中で行われるので、ファイルはアップロードされません。Windows でも macOS でも Linux でも、iPhone でも Android でも同じように動き、通信を切っても動き続けます。

  • 処理される場所 ブラウザーの中です。ファイルがアップロードされることはありません。
  • 可逆 何も捨てられません。NDJSONはTOMLが持っていたものをそのまま保持します。
  • ファイルサイズの上限 1ファイルあたり100MBまで。無料、アカウント不要です。

一度に100ファイルまで。フォーマットが混ざっていても構いません。

一つの設定ファイルが一行になる、それが正しい単位

TOML のドキュメントは常にテーブルであり、トップレベルが配列になることは仕様上ありません。改行区切りの JSON はトップレベルの配列を境界にして分割しますが、TOML の一つのファイルの中にはその境界がそもそも現れないため、ファイル全体が一行になります。

これは制約というより、この用途にちょうど合った形です。pyproject.toml を断片に分けたい人はいません。TOML を NDJSON に変換する人はたいてい、多数の設定ファイルを一つのコレクションにまとめようとしていて、一ファイル一レコードという単位がそのまま欲しい形になります。

ワークスペースの Cargo.toml を一覧化する

手順は単純です。各ファイルを変換し、その一行を成長中の出力ファイルに追記していきます。それぞれの行は独立した完全な JSON の値で、外側を囲む配列もカンマもないため、連結すること自体がそのままマージになります。

こうして作った一覧は、質問に答えられるデータになります。どのクレートが特定のバージョンを固定しているか、どのパッケージがライセンスを宣言していないか。そうした問いに、フォルダーを歩いてパースするスクリプトを書く代わりに、一つのクエリーで答えられるようになります。

変換では追加できないフィールド

出どころの分からないレコードは、一覧としてほとんど使い物になりません。変換はファイルの中身だけを読み、パスやリポジトリ、コミットは関知しないため、書き出された行にはどこから来たかを示す情報がありません。

追加するタイミングは二つ考えられます。連結する段階で jq を通してパスのキーを差し込む方法は、TOML ファイル自体には手を加えずに済みます。もう一つは TOML ファイルの中にキーを足す方法で、将来のすべての変換に引き継がれますが、他人が所有するファイルに手を入れることになります。前者のほうが多くの場面で使いやすい方法です。

一行に入っているもの

圧縮された JSON で、インデントも余分な空白もなく、キーは TOML に書かれていた順のまま、末尾には改行が付きます。テーブルは入れ子のオブジェクトに、テーブルの配列はオブジェクトの配列になり、著者一覧やビルドターゲットの集合も、クエリーエンジンが期待する形でそのまま届きます。

行の長さは設定ファイルの長さに比例します。pyproject.toml 程度なら数キロバイトですが、大きな設定ファイルではそれ以上になることもあります。

日付や特殊な数値がストリームに入るとき

TOML には本格的な日時型がありますが JSON にはないため、日付やタイムスタンプはすべて文字列になります。オフセットはそのまま残り、ローカルの日付はそのまま書かれ、ローカルの時刻にはミリ秒の桁が加わります。

無限大や非数を表す inf、nan は有効な TOML の値ですが、JSON では null になります。設定された無限の上限値と、未設定の値が、データセットの中では見分けがつかなくなります。整数と浮動小数点の区別も失われ、1.0 は 1 として書き出されます。

変換を止めてしまう TOML ファイル

TOML 1.0 は 64 ビットの符号付き整数を要求しますが、JSON の数値は倍精度浮動小数点数であり、およそ九千兆を超える値は正確に表現できません。パーサーは丸めた数値を書き込むのではなく、該当する行の番号を示してエラーで止まります。

これは一覧を作る用途では特に正しい挙動です。誤った数値が正しい数値と見分けがつかないまま何千件も並んでしまうのが一番困る事態だからです。エラーが出たら、その値を TOML の側で文字列として引用符付きにしておくと解決します。多くの場合、それは量ではなく識別子として扱うべき値です。

ファイルごとにキーが揃わないレコード

プロジェクトごとに設定の構成は違います。あるファイルには三つのリンターを含む tool テーブルがあり、別のファイルにはそれ自体がなく、さらに別のファイルは誰も使っていない独自のキーを持っています。それぞれの行は自分のファイルが持っていたキーだけを持つので、同じコレクションを列の形に平坦化したときに起きる、キーの和集合や空セルの問題が生じません。

それをどう扱うかは受け取り側次第です。スキーマを固定しないストアであれば、そのまま受け入れて一部のレコードにしかないキーを問い合わせることもできます。固定スキーマの読み込みツールであれば、外れ値を拒否するか、そのフィールドを落とすことになります。

コメントは、このデータセットには残らない

TOML のコメントは、なぜその値がそうなっているかという理由そのものです。依存関係をなぜ固定しているか、どのチケットに関連する回避策か、その数値が何を意味するか。NDJSON は一行ごとの JSON なので、JSON にコメント構文がない以上、これらはすべて失われます。

一度読んで捨てるデータセットであれば問題ありません。TOML ファイルをこのデータから生成し直すつもりなら話は別で、理由の書かれていない設定を作ることになります。このストリームは設定についての問いに答えるために使い、設定ファイル自体はそのまま元の場所に置いておくのが適切です。

どこで処理され、どのくらいの規模まで扱えるか

パースも書き出しも、このページの中で JavaScript によって行われます。トークンやレジストリの内部 URL を含む設定ファイルであっても、外に送信されることはありません。

無料枠は 100 MB までで、ファイル全体が一度メモリーに読み込まれます。定期的に一覧を作り直す必要があるなら、ディレクトリを歩いて本格的な TOML ライブラリーでパースし、パスを添えて行を出力するスクリプトのほうが向いています。このページは、その一覧を最初に作り、自動化する価値があるかを見極めるための場所です。

TOML を NDJSON に変換する手順

  1. お手元の TOML ファイル をこのページに落とすか、押してファイルを選んでください。
  2. 変換先に NDJSON を選びます。変換はブラウザーの中で行われ、ファイルはアップロードされません。
  3. できあがった NDJSON ファイル をダウンロードします。

TOML と NDJSON——何が変わるか

TOMLとNDJSONの比較
TOMLNDJSON
正式名称Tom's Obvious Minimal LanguageNewline-Delimited JSON
拡張子.toml.ndjson, .jsonl
メディアタイプapplication/tomlapplication/x-ndjson
最初の公開20132013
仕様TOML 1.0
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるか対応なし対応なし
代わりに検討される形式YAML, JSON, INIJSON, CSV

失われるもの

コメントは引き継がれません。TOML ではファイルに説明を書き添えられますが、NDJSON にはコメントの構文そのものがないので、説明の行はすべて落ちます。そして困るのは、まさにコメントが書かれるようなファイル——誰かが引き継ぐ設定ファイルです。

残るもの

失われるものはありません。TOML も NDJSON も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。

結果を開く

開くプログラムが重なりません。TOML はVisual Studio Codeで、NDJSON はjqとpandasで開きます。結果を渡す相手には後者のどれかが要ります。

どちらの形式が何のためのものか

2 つは狙っている用途が違います。TOML は編集、NDJSON はプログラム間のデータ受け渡しとストリーミングです。ここは考える価値があります。一方が存在する理由が、そのままもう一方が使いにくい理由になっていることが多いからです。

TOML は 2013 年に登場しました。 TOML 1.0 で規定されています。ファイルが、それを書いた道具より長く生きなければならないなら、この一点には値打ちがあります。

NDJSON は 2013 年から使われています。jqとpandasがこの形式を読めます。

TOML から NDJSON:よくある質問

TOML ファイル はどこかにアップロードされますか。

いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。

TOML から NDJSON への変換は無料ですか。

はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。

TOML を NDJSON に変換すると品質は落ちますか。

いいえ。NDJSON は同じ内容を何も捨てずに保持できるので、結果は品質の点で元のファイルと同じです。

TOML から NDJSON への変換は可逆ですか。

失われるものはありません。TOML も NDJSON も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。

TOML から NDJSON にすると、コメントは残りますか。

コメントは引き継がれません。TOML ではファイルに説明を書き添えられますが、NDJSON にはコメントの構文そのものがないので、説明の行はすべて落ちます。そして困るのは、まさにコメントが書かれるようなファイル——誰かが引き継ぐ設定ファイルです。

これらのフォーマットについて