100% ローカル — データがブラウザの外に出ることはありません

TOMLをJSONに変換|長いIDも桁を落とさずそのまま届ける

TOMLをJSONに変換します。大きな整数は桁のまま通り、日付は時差を保つので、書いたとおりの設定がそのままコードまで届き、桁が丸められる心配をしなくて済みます。

高速 プライベート Cookieゼロ
インデント

TOML 入力

JSON 出力

このツールの動作

TOML 文書が JSON になります。テーブルは入れ子になり、[[テーブルの配列]] は配列になります。

title = "Demo"

[server]
host = "localhost"
port = 8080
{
  "title": "Demo",
  "server": {
    "host": "localhost",
    "port": 8080
  }
}

点で区切ったキーも同じように入れ子になります。a.b.c = 1 は {"a": {"b": {"c": 1}}} です。

大きな整数は、そのまま

snowflake = 1096285471735640155
{
  "snowflake": 1096285471735640155
}

TOML が求めるのは符号付き64ビット整数で、JavaScript の数値が正確に保てるのは53ビットです。解析器は文書全体に「integer value cannot be represented losslessly」と答えていました。正当な TOML ファイルが、識別子ひとつのために拒まれていたのです。いまは桁が桁のまま運ばれます。JSON を書くのは精度を落とさない書き手で、このサイトのほかの場所で大きな数を守っているのと同じものです。本物の欠陥で、このページを書く過程で見つけ、直しました。

inf と nan は、無かったことにせず名指しする

rate = inf
JSON has no infinity: "rate" is inf

TOML には inf、-inf、nan があり、JSON にはそのどれもありません。JSON.stringify はそれらを null と書くので、無限の速度が「速度なし」に変わり、結果のどこにもその旨はありませんでした。いまはその値で止まり、それを持つキーの名前を告げます。TOML へ戻る向きで null を拒むのと同じ姿勢です。代わりに何を置くか、文字列か、とても大きな数か、そのキーを消すかは、データについての判断であって、読み取りではありません。

JSON に無いもの

  • 日付型。 1979-05-27T00:32:00-07:00 は文字列 "1979-05-27T00:32:00.000-07:00" になります。時差は残り、ミリ秒は元に無くても書き足されます。
  • 二種類の数。 TOML は整数と浮動小数点を区別しますが、JSON の数はひとつです。1.0 は 1 として届きます。戻せば、浮動小数点と書いた場所に整数が立っています。
  • コメント。 ファイルを説明するものであってデータではなく、置き場所がありません。

バイト順マーク、つまり Windows の編集ソフトが好んで付ける見えない U+FEFF で始まるファイルは、キーに使える文字についての警告で拒まれていました。目に見えない文字を指しながら。いまは読み取りの前に取り除きます。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

64ビット整数は通りますか。
はい、このページを書いてからは通ります。TOML は符号付き64ビット整数を求めますが、JavaScript の数値が正確に保てる範囲を超えた時点で、解析器は文書全体を「integer value cannot be represented losslessly」と突き返していました。Discord の ID やナノ秒の時刻がひとつあるだけで、まったく正当なファイルが拒まれていたわけです。いまは桁が一つずつ通ります。JSON を書くのが JavaScript 標準ではなく、精度を落とさない書き手だからです。
`inf` や `nan` はどうなりますか。
変換は止まり、キーの名前を告げます。TOML には特別な浮動小数点が三つあり、JSON には一つもありません。`JSON.stringify` はそれらを `null` と書くので、無限の速度が黙って「速度なし」に変わっていました。キーを告げることで、判断は持ち主の手に残ります。文字列にするか、とても大きな数にするか、そのキーを無くすか。
日付はどうなりますか。
JSON に日付型は無いので、時差を含む ISO 8601 の文字列になります。知っておく価値のある細かい点がひとつ。書いていなくてもミリ秒が書き足されるので、`07:32:00` は `07:32:00.000` として届きます。指す瞬間は同じですが、文字列は同じではありません。

関連ツール