使い方
- 変換方向を選択します:JSON → YAMLまたはYAML → JSON。
- データを貼り付けるか、「例を試す」を押します。入力に合わせて結果が更新されます。
- 出力のインデントを2スペースまたは4スペースから選びます。
- 結果をコピーまたはダウンロードします。「出力を入力に使用」を押すと、変換方向が切り替わり、元の形式に戻せます。
仕組み
変換には、YAML 1.2仕様を実装したオープンソースのyamlライブラリ(バージョン2)を使用します。実用上、YAML 1.2はJSONの上位互換であるため、どのJSONドキュメントも情報を失わずにYAMLへ変換できます。また、マップ、リスト、文字列、数値、真偽値、nullのみを使ったYAMLは、変換後も元と同一のJSONになります。
YAMLの出力では、別の値と解釈される可能性がある文字列を引用符で囲みます。PyYAMLや多くのCIツールなど、古いYAML 1.1パーサーはyes、no、on、offを真偽値、0777を8進数、2024-01-31を日付として読み取るため、これらはそれぞれ「yes」、「0777」、「2024-01-31」と出力します。長い文字列は複数行に折り返しません。JSONにはコメントがないため、コメントは引き継げません。
YAMLの読み込み時には、アンカー(&name)とエイリアス(*name)が、<<マージキーを含めて展開されます。また、---で区切られた複数のドキュメントはJSON配列になります。ブラウザーを保護するため、エイリアスの展開数には上限があり、「Billion Laughs」ドキュメントによる攻撃を防ぎます。JSONに対応する値がないYAMLの値は、可能な限り近い形に変換されます。.infと.nanはnullになり、タイムスタンプは文字列のままです。構文エラーは行番号と列番号とともに表示されます。
使用例
Kubernetesマニフェスト
スクリプトでJSONとして記述されたDeploymentを、kubectlユーザーが使い慣れたYAML形式に変換します。containers配下のリストは、- name: webのように出力されます。「no」などの値は文字列のままになるよう引用符で囲まれます。
アンカーを使ったCI設定
パイプラインファイルでdefaultsを定義(&defaults)し、<<: *defaultsで再利用します。JSONに変換すると、マージ後に各ジョブが持つキーを確認できます。
OpenAPI仕様
YAMLで管理しているOpenAPIファイルを、コードジェネレーター用のJSONに変換します。YAMLを貼り付けて、インデントを2スペースに設定し、.jsonファイルをダウンロードしてください。
よくある質問
YAMLで「yes」が引用符で囲まれるのはなぜですか?
PyYAML、Ansibleをはじめ、多くのツールで使われているYAML 1.1のルールでは、引用符で囲まれていないyes、no、on、offは真偽値として扱われます。引用符で囲めば、どのパーサーでも文字列として扱われます。引用符は値に含まれません。
JSONに変換するとYAMLのコメントは保持されますか?
いいえ。JSONにはコメント構文がないため、コメントは削除されます。JSONをYAMLに戻しても、コメントは復元されません。
---で区切られた複数のYAMLドキュメントはどうなりますか?
順序を保ったまま、各ドキュメントを1つの要素とするJSON配列に変換されます。ドキュメントが1つの場合は、その値に直接変換されます。
CloudFormationの!Refなどのカスタムタグはどうなりますか?
アプリケーション固有のタグには対応していません。警告が表示され、タグ付きの値は通常の値として変換されます。そのため、!Ref MyBucketは文字列「MyBucket」になり、タグ自体は失われます。
プライバシー
どちらの方向の変換もブラウザー内で完結します。JSONやYAMLがアップロード、保存されたり、解析データに含まれたりすることはありません。