ツール

TOML ⇔ JSON 変換ツール

Cargo.toml や pyproject.toml などの TOML を JSON に、JSON を TOML に、テーブルや日付を保ったまま変換します。

ブラウザ内で実行データフォーマット308
無料

入力

0 B

結果

結果はここに表示されます。

TOML は Cargo.toml、pyproject.toml、netlify.toml、そして多くの Hugo サイトで使われている形式で、遅かれ早かれそうしたファイルを JSON として扱いたくなります。jq で問い合わせたり、スクリプトに渡したり、2 つのバージョンを構造的に比較したりするためです。このツールは smol-toml で双方向に変換します。smol-toml は TOML 1.1 向けの小さなパーサー兼シリアライザーで、公式の toml-test スイートの大半に合格しています。仕様そのものは toml-lang/toml にあります。構文エラーは行と列を示し、一方の形式で表現できないものがあれば、黙って失うのではなく、該当するキーを示して変換を止めます。

動作のしくみ

  • インラインテーブル、ドット付きキー、[[bin]] のようなテーブルの配列は、すべて通常のネストされた JSON オブジェクトと配列になります。
  • オフセット付き日時は ISO 8601 の文字列になり、ローカルの日付や時刻は 1979-05-27 のように書かれたときの形を保ちます。
  • JSON の null には TOML で対応するものがないため、smol-toml のように黙って捨てるのではなく、そのキーを示します。
  • TOML へ変換するときは、ネストされたオブジェクトは [table] セクションに、オブジェクトの配列は [[array]] テーブルになります。

データの行き先

どこにも行きません。このツールは完全にブラウザ内で動作します。貼り付けたテキストはページが処理し、サーバーに送信されることも、ログに記録されることもありません。

このツールは無料で登録不要です。結果は開いているページの中にだけあり、どこにも保存されません。

必要なポイント

このツールは無料です。ログインもポイントも必要ありません。

よくある質問

null 値があると変換が止まるのはなぜですか?
TOML には null がないからです。黙ってキーを飛ばす変換ツールは、見た目は正しいのに挙動が異なるファイルを作ってしまいます。そのためこのツールは変換を拒否し、$.package.homepage のようなパスで場所を知らせます。キーを削除するか、空文字列や false のような実際の値を与えてください。
日時が引用符付きの文字列で返ってきたのはなぜですか?
JSON には日付型がないため、TOML の日時は JSON へ変換する際に文字列になります。その JSON を元に戻すと、JSON のどこにもそれが日付だったという情報がないため、引用符なしの TOML 日付ではなく引用符付きの文字列になります。利用側が本物の TOML 日時を必要とする場合は引用符を外してください。
コメントやキーの順序は保たれますか?
TOML から JSON へは、キーの順序が保たれます。JSON から TOML へは、各テーブルの通常のキーがサブテーブルより先に書かれます。TOML では、[table] ヘッダーの後に続くキーはそのテーブルに属するからです。コメントは保たれません。JSON には置き場所がないため TOML のパース時に捨てられ、JSON を経由して往復すると説明のないデータだけが戻ってきます。TOML ファイルを正として保持し、そこから JSON を生成してください。
非常に大きな整数はどうなりますか?
TOML の整数は 64 ビットですが、JavaScript の数値が正確なのは 2^53 までです。9007199254740993 を別の数に丸める代わりに、パーサーはエラーを報告します。snowflake ID のような値は文字列として保存するほうが安全です。同様に、JSON で表現できない inf と nan も拒否されます。

背後にあるオープンソース

このツールは squirrelchat/smol-toml(BSD-3-Clause)の上で動作しています。同じ処理を自分のプログラムに組み込みたい場合は、そのライブラリを使ってください。

squirrelchat/smol-toml

別の呼び方

  • toml json 変換
  • json toml 変換
  • toml 変換 オンライン
  • toml パーサー
  • cargo.toml json
  • pyproject.toml json 変換