JSON と YAML を相互変換
JSON と YAML の相互変換
JSON と YAML は同じデータ — マップ、リスト、文字列、数値、真偽値、null — を二つの構文で表します。JSON は API やパッケージファイルの言語、YAML は Docker、Kubernetes、GitHub Actions、CI パイプラインの設定ファイルの言語です。この変換ツールは一方を他方へ即座に翻訳し、人がつまずく細部 — 引用符、インデント、YAML が真偽値と見なす奇妙な単語 — を引き受けます。
手順
- 1 方向を選び、文書を上の欄に貼り付けます。入力と同時に下に結果が現れます。
- 2 インデント幅を設定します。YAML でも多くの JSON スタイルガイドでも 2 スペースが慣例です。
- 3 結果をコピーするか、ファイルとしてダウンロードするか、出力を新しい入力にして往復変換を確かめます。
二つの形式で何が変わるか
YAML は波括弧、角括弧、ほとんどの引用符を省き、構造をインデントで表すので、40 行の JSON オブジェクトは 25 行の YAML 文書になります。キーの順序は変わりません。リストはダッシュ付きの項目、入れ子のオブジェクトはインデントされたブロックになり、空のオブジェクトやリストは {} や [] のまま書かれます。逆方向では、JSON にコメントがないため YAML のコメントは失われます。
一部の文字列が引用符付きになる理由
YAML では引用符なしの yes、no、on、off、true、null は真偽値や null として、123 や 1.0 は数値として読まれます。これらに見える文字列は引用符で囲まなければ、戻るときに型が変わります — 国コード NO が false になるのが典型例です。変換ツールはまさにそれらの文字列に加え、先頭や末尾に空白があるもの、コロン+空白を含むもの、特殊文字で始まるものを引用符で囲み、それ以外は読みやすさのためそのままにします。
複数行の文字列
改行を含む文字列は YAML のブロックスカラーとして書かれます。キーの行に縦棒、その下にインデントしたテキスト、末尾に改行がなければマイナス記号が付きます。Kubernetes のマニフェストや CI ファイルで見る形で、読み戻すと正確に同じ文字列になります。
インデントと互換性
変換ツールは YAML 1.2 を書き出し、現代のすべてのパーサー — PyYAML、js-yaml、Go yaml、Ruby Psych — が読めます。入れ子のキーは選んだ幅でインデントされますが、リスト内のオブジェクトのキーは仕様どおり常にダッシュの 2 文字後ろに置かれます。タブは決して使いません。