YAML to JSON — YAML 設定をオンラインで JSON に変換
YAML データを JSON 形式に変換します。anchor、alias、merge key を解決し、インデントは設定可能、すべてブラウザ内で完結します。
YAML と JSON は兄弟のようなフォーマットです —— YAML はより人間に親しみやすい構文を持つ JSON であり、有効な JSON ファイルはすべて同時に有効な YAML ファイルでもあります。YAML から JSON への変換は DevOps における最も一般的なデータ形式変換です。なぜなら YAML は人間が書く言語(Kubernetes manifests、CI パイプライン、アプリケーション設定)であり、JSON は機械が読む言語(API レスポンス、Terraform state、クラウドプロバイダーの CLI 出力)だからです。変換自体はほとんど自明です —— YAML は JSON のスーパーセットです —— しかし、YAML には JSON が受け取る前に解決しなければならない機能が追加されています:anchor と alias(ファイル内の DRY 参照)、merge key(共有設定ブロックのディープマージ)、そしてより豊富な型システム(タイムスタンプ、16 進数、バイナリデータ)です。
anchor と alias は、変換時に最も混乱を招く YAML の機能です。YAML の anchor(&defaults)は再利用可能なブロックを定義し、alias(*defaults)は alias が現れる箇所にそのブロックを挿入します。JSON 出力には完全に展開されたデータが含まれます —— anchor と alias は YAML の記述上の便宜であり、データモデルではないため、JSON には対応する概念がありません。merge key(<<: *defaults)は、alias で参照されているマッピングを現在のマッピングにディープマージすることで解決され、現在のマッピング側のキーが優先されます。この解決は変換中に自動的に行われ、JSON の出力はマージ後の結果になります。
最後に下游への受け渡しについて:JSON 出力が何らかのプログラミング言語に渡される場合、YAML から JSON への変換と適切な JSON-to-Code ジェネレーター(JSON to TypeScript でフロントエンドの型、JSON to Python でデータ処理、JSON to Go でバックエンドの構造体)を組み合わせてください。JSON を別のツールの設定(Ansible inventory、Terraform variables、GitHub Actions inputs)にする必要があるなら、すべての構成管理ツールに JSON パーサーがあるため、JSON はちょうど良い中間フォーマットです。逆方向の変換(JSON から YAML)が必要な場合は、本サイトの JSON-to-YAML ツールが同じインデントとフォーマット制御で対応します。
使い方
YAML を貼り付ける
YAML の文字列またはファイルを入力欄にドロップしてください。パーサーは YAML 1.2 に対応し、`---` で区切られた複数ドキュメント YAML も処理できます。各ドキュメントは個別の JSON オブジェクトに変換されます。
JSON のフォーマットを選択
デフォルトは 2 スペースのインデントと pretty-print です。compact モードに切り替えると空白を最小限に抑えられます(機械間のデータ交換向け)。スタイルガイド準拠のため、2 スペースと 4 スペースを切り替えることもできます。
JSON をコピーまたはダウンロード
JSON をクリップボードにコピーするか、.json ファイルとしてダウンロードできます。出力は有効な JSON (RFC 8259) であり、あらゆる言語の標準ライブラリで正しくパースされます。
よくある質問
変換器は YAML の anchor と alias に対応していますか?
はい。YAML の anchor(`&ref`)と alias(`*ref`)は展開後の値に解決されます。merge key(`<<: *ref`)も解決されます。JSON 出力には展開済みのデータが含まれます —— anchor と alias は YAML の記述上の便宜であり、データ構造ではありません。
変換器は YAML の複数ドキュメントファイルをどのように処理しますか?
複数ドキュメント YAML(`---` で区切られ、必要に応じて `...` で終わるドキュメント)は JSON 配列に変換され、各 YAML ドキュメントが 1 つの要素になります。単一ドキュメントのファイルは配列ではなく、単一の JSON 値を出力します。
YAML のタイムスタンプやブール値などのデータ型はどうなりますか?
YAML の型システムは JSON よりも豊富です。タイムスタンプ(`2024-01-15`)は ISO-8601 文字列(JSON における最も可搬性の高い表現)に変換されます。ブール値(`true`、`false`、`yes`、`no`、`on`、`off`)は JSON の `true` と `false` に正規化されます。null 値(`~`、`null`、空)は JSON の `null` になります。
YAML 入力のキー順序は保持されますか?
はい、保持されます。YAML 1.2 のマッピングはキーの挿入順序を保持し、JSON 出力もその順序に従います。ただし JSON 仕様はキーの順序を保証していないため、キーを再ソートするコンシューマは順序を変える可能性があります。本ツール自体は順序を保持します。
制限事項
- 標準ライブラリ以外の YAML カスタムタグには非対応`!!python/object` や `!!java/com.example.Bean` のような YAML タグは文字列としてパースされますが、デシリアライズはされません。「preserve tags」オプションを有効にしている場合、タグのプレフィックスは `_tag` キーに保持されます。
- 大きな YAML ファイルは深くネストされた JSON を生成する場合があるJSON 出力は YAML の構造をそのまま反映するため、何十階層ものネストが発生することがあります。一部の JSON コンシューマ(特に古いパーサー)にはスタック深さの制限があり、深くネストされた出力を拒否する場合があります。
- 複数ドキュメント YAML を単一の JSON 配列にまとめる変換はロスが発生する複数の YAML ドキュメントを 1 つの JSON 配列にまとめる際、ドキュメント区切り記号のコメントやメタデータは失われます。1 ファイル内の複数 YAML ドキュメントのセマンティックなグループ分けは JSON には引き継がれません。
プラットフォーム別の注意点
- macOS
- CLI での同等コマンド: `yq eval -o json input.yaml` (Homebrew 経由でインストールした yq パッケージ)。yq がインストールされていない、あるいは YAML をチャットウィンドウから貼り付けただけのケースでは、ブラウザツールが適しています。
- Linux
- CLI での同等コマンド: `python3 -c 'import yaml,json; print(json.dumps(yaml.safe_load(open("file.yaml")), indent=2))'`。複雑な YAML に対して、引用符やエスケープを書き分ける手間をブラウザツールが省いてくれます。
- Web
- すべての処理はクライアントサイドで実行されます。YAML データがアップロードされることはありません。ページ読み込み後はオフラインでも動作します。