YAML
YAML コンバーター
YAML と JSON を相互に変換。
YAML と JSON について
YAML と JSON は、マップ・リスト・文字列・数値・真偽値という同じ構造を、異なる記法で表します。YAML はインデントに依存し人が手で書く形式、JSON は明示的で、多くの API やライブラリが実際に読み込む形式です。変換はおおむね機械的ですが、YAML にはコメントやアンカーなど JSON では表現できない機能がある点に注意が必要です。
YAML の型のルールは見た目より狭いものです。真偽値としてパースされるのは true/false(および True や TRUE といった大小文字違い)だけで、yes、no、on、off は単なる文字列のまま残ります。これは、それらも真偽値として扱っていた一部の古い YAML パーサーとは異なる挙動で、国コード NO が静かに false になってしまうことから、ネット上では「ノルウェー問題」として知られる食い違いです。ここでより起こりやすい驚きは精度の問題です。JSON の数値は IEEE-754 倍精度浮動小数点なので、2^53 を超える 64 ビット整数は、元の YAML の値が正確であっても変換の瞬間に 1〜2 桁を失うことがあります。
使われる場面
- Kubernetes のマニフェストや docker-compose をスクリプト用に JSON へ変換する
- API の応答を YAML 形式の設定ファイルに貼り付ける
- CI パイプラインの定義が想定どおり解釈されるか確認する
- ツールを移行する際に 2 つの設定形式を見比べる
よくある質問
コメントはどうなりますか?
失われます。JSON にはコメント構文がないため、YAML から JSON に変換すると # で始まる行はすべて完全に消えます。コメントが重要な場合は YAML の原本を残しておいてください。
アンカーとエイリアスには対応していますか?
はい。ただし JSON は参照を表現できないため、指し示す値に展開されます。エイリアスが別のエイリアスを参照していると容量が急激に膨らむので、巨大な文書になる変換は実行せずに拒否します。
入力したデータは保存されますか?
いいえ。変換はその 1 回のリクエストのためだけにサーバー上で行われ、その後は記録も保持もされません。
JSON に変換した後、大きな整数が少し変わってしまったのはなぜですか?
JSON はすべての数値を IEEE-754 倍精度浮動小数点(JavaScript が使うのと同じ数値型)として表現し、これは 2^53(9,007,199,254,740,991)までしか整数を正確に保持できません。64 ビットのデータベース ID や Discord 風のスノーフレーク ID のような YAML の値はこれを超えることがあり、JSON の数値に変換すると静かに丸められてしまいます。正確な精度が重要な場合は、変換前にそうした値を引用符付きの YAML 文字列にしておけば、数値ではなく JSON の文字列として渡されます。