このツールの動作
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だけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。