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

YAMLをJSONに変換|長いIDも桁を落とさずそのまま保つ

YAMLをJSONに変換します。大きな整数は桁のまま保たれ、複数の文書はひとつの配列になります。API やスクリプトに、IDの末尾が丸まる心配をせずに渡せます。

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

YAML 入力

JSON 出力

このツールの動作

YAML は JSON の上位集合なので、変換の大部分は淡々と進みます。マッピングはオブジェクトに、シーケンスは配列に、スカラーは文字列・数値・真偽値・null になります。

以下は、淡々と進まなくなる場所です。

長い識別子は桁を保つ

id: 12345678901234567890
{ "id": 12345678901234567890 }

平凡に見えますが、それが狙いです。JSON の数値は倍精度浮動小数点で、保持できるのはおよそ十五桁です。二十桁の識別子——Twitter のスノーフレーク、PostgreSQL の bigint——は、以前は黙って別の数値として返っていました。いまは桁を正確に読み、そのまま書き出します。

アンカーは展開される。JSON がそれを持てないから

defaults: &d
  retries: 3
web:
  <<: *d

は retries: 3 の複製二つになります。JSON には「同じ値が二か所にある」という概念がないため、共有はこの境界を越えられません。出力は入力より大きくなり、失われるものはありません。ただし関係は失われます。アンカーで組んだファイルを往復させる前に、知っておく価値があります。

複数の文書は配列になる

--- は文書を区切ります。JSON に区切りはないので、三つの文書からなる流れは三要素の配列になります。文書が一つなら包みません。オブジェクトがそのまま返ります。

null は三通り

~、null、そして空の値は、YAML ではいずれも null を意味し、三つとも null になります。JSON のほうが YAML より単純である数少ない箇所です。

この変換があなたの代わりに決められないこと

yes は文字列 "yes" として読みます。YAML 1.2 がそう定めているからです。YAML 1.1 を実装する PyYAML 向けに書かれたファイルなら、真偽値の真のつもりだったはずです。

どちらの版を念頭に書いたのかは、ファイルのどこにも書かれていません。YAML が Python の道具から来ていて、素の yes、no、on が重要なら、元の側で引用符を付けてください。曖昧さは変換器ではなくファイルの側にあります。

プライバシー

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

よくある質問

なぜ二十桁の ID が以前は違う値で返っていたのですか。
倍精度浮動小数点を経由していたからです。保持できるのはおよそ十五桁で、`12345678901234567890` は `12345678901234567000` になっていました。別の数値であり、警告もありません。YAML の読み手には大きな整数を正確に保つよう指示でき、いまはそうしているので、桁は変換を越えて残ります。
アンカーとエイリアスはどうなりますか。
解決されます。各 `*alias` は対応する `&anchor` の内容の複製になり、`<<:` のマージキーも適用されます。JSON には共有を表す手段がないため、これは選択ではなく唯一の忠実な翻訳です。出力は元の YAML より大きくなります。それが正直な代価です。
ファイルに複数の文書があります。何が返りますか。
JSON の配列で、文書ごとに一要素です。`---` は YAML の文書を区切りますが、JSON に対応する区切りはありません。配列だけがすべてを保てます。文書が一つのファイルは、要素一つの配列ではなくオブジェクトそのものを返します。

関連ツール