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

TOMLをYAMLに変換|どの読み手でも同じ値になる設定にする

TOMLの設定をYAMLに変換します。紛らわしいスカラーには引用符が付くので、古い PyYAML でも新しい読み手でも、アプリに届く値はいつでも同じになります。

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

TOML 入力

YAML 出力

このツールの動作

TOML の設定が YAML になります。テーブルは入れ子の写像に、[[テーブルの配列]] は並びになります。

title = "Demo"

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

字下げは選べます。既定は空白二つで、たいていの YAML 検査ツールが期待する形です。

要るところだけ引用符を、ほかは裸で

country = "NO"
answer = "yes"
start = "12:30"
country: "NO"
answer: "yes"
start: "12:30"

裸のままなら、YAML 1.1 の読み手はこの三つを false、true、数の 750 として読みます。PyYAML、つまり Ansible、つまり数多くの配信の流れがそうです。これがノルウェー問題です。国コードが真偽値に変わり、ファイルには警告のひとつもありません。書き手は紛らわしいスカラーだけを引用符で囲み、ほかには手を触れません。ファイルは読みやすいままで、YAML の二つの版が中身について一致します。

大きな整数は桁を保つ

snowflake = 1096285471735640155
snowflake: 1096285471735640155

TOML は符号付き64ビット整数を求めますが、解析器は、JavaScript の数値が正確に保てる範囲を超えた時点で文書全体を拒んでいました。識別子ひとつで、正当な設定が変換できなくなっていたのです。いまは桁が変わらずに通ります。本物の欠陥で、このページを書く過程で見つけ、直しました。

JSON を経由する代償

この変換は JSON を経由します。この場所の組み合わせ変換はどれもそうです。二つの半分はすでに試験され、その警告文もすでに正確だからです。

  • inf、-inf、nan は、キーを名指しして断ります。 JSON にはその三つが無く、null と書かれてしまいます。無限の速度が「速度なし」として届くことになります。YAML なら .inf を運べますが、経由する JSON は運べません。値を落とす代わりに、そう告げます。
  • 日付は引用符付きの文字列になります。 TOML の日付に JSON の対応物はありません。直に進めば日付のままですが、07:32:00 のような地方時には、暦の日付がまるごと勝手に付きます。
  • コメントは残りません。 それはファイルのものであって、データのものではありません。

Windows の編集ソフトが付ける見えないバイト順マークで始まるファイルは、キーに使える文字についての警告で拒まれる代わりに、普通に読めるようになりました。

プライバシー

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

よくある質問

なぜその値だけ引用符が付くのですか。
引用符が無いと、YAML の読み手の半分にとって別の意味になるからです。`yaml` パッケージが書くのは YAML 1.2 で、`NO`、`yes`、`12:30` は文字列です。しかし世界でもっとも使われている読み手 PyYAML は YAML 1.1 を適用し、それぞれ偽、真、六十進数の 750 になります。紛らわしいスカラーだけを引用符で囲めば、同じファイルから両方の読み手が同じ値を得られます。
日付はどうなりましたか。
`"1979-05-27"` のように、引用符付きの文字列として届きます。変換は JSON を経由し、JSON には日付型がありません。TOML の日付は文字列になり、日付に見える文字列は引用符で囲む必要があります。そうしないと YAML 1.1 の読み手が勝手に時刻として読み直してしまうからです。
YAML には `.inf` があるのに、なぜ `inf` は拒まれるのですか。
間に JSON があるからです。この場所の組み合わせ変換はすべて JSON を経由し、JSON に無限はありません。そこで、黙って null にする代わりに、キーの名前を告げて断ります。TOML から YAML へ直に進めば無限は残せますが、`07:32:00` のような地方時が、周りに日付を勝手に付けた完全な時刻に変わってしまいます。経由するほうが失うものは少なく、運べないものは名指しされます。

関連ツール