YAML を JSON に変換(インデントエラーを避ける)

YAML 1.2 以降、すべての JSON ドキュメントは有効な YAML です。YAML 設定を JSON に変換し、インデントと型推論の落とし穴に注意しましょう。

YAML と JSON は親戚

YAML 1.2 は JSON の厳格なスーパーセットなので、どんな JSON ドキュメントもすでに合法な YAML です。YAML から JSON への変換は、主にインデントベースの構造を波括弧と角括弧で書き換える作業になります。

インデントの規則

YAML はタブによるインデントを禁じています —— 必ず空白を使い、兄弟キーは同じ深さに揃えてください。紛れ込んだタブやずれたキーが、最もよくある YAML のパースエラーです。

ノルウェー問題

クォートされていない NO・yes・on・off は、一部のパーサで真偽値として読まれてしまい、国コードの NO が false になってしまいます。文字列のままにしたいときはクォートで囲んでください。

安全に変換する

まず YAML を検証してから変換します。曖昧なスカラーはクォートし、数値・日付・先頭ゼロの値が想定どおりの型のままかを確認してください。

複数文書 YAML ストリーム

1 つの YAML ファイルは '---' で区切って複数の文書を持てます。JSON には対応する概念がありません —— 各文書を独立に変換し、下流のツールがまとめて必要とする場合は JSON 配列で包んでください。Kubernetes マニフェストが最も典型的なケースです。

アンカーとエイリアス

YAML の & アンカーと * エイリアスは、参照によってノードを再利用できますが、JSON にはエイリアスがありません。安全なコンバータは各エイリアスをアンカーの値のコピーに展開します。すると文書が膨らみます。YAML に戻すラウンドトリップでは、元の共有関係は失われる点に注意してください。

YAML が忠実さを失うとき

コメント、!!binary のようなタグ注釈、カスタムタグ、block と flow スタイルの違い、キーの順序などは、YAML から JSON への変換で失われます。純粋なデータ交換なら問題ありませんが、人が編集する設定ファイルでは YAML をソースオブトゥルースとして保つのが安全です。