よくある質問
往復変換は無損失ですか?
JSON 側から始める分にはほぼ無損失です。JSON は YAML 1.2 の厳密な部分集合のため、JSON → YAML → JSON は全値を保持します。逆方向では YAML 固有の機能(コメント、アンカー / エイリアス(インラインに展開)、`!!set` や `!!binary` のようなタグ付きの型、日付・無限大などの豊かなスカラー型)が失われます。往復の忠実度が重要な場合は、表現力の高い YAML を正本として保持し、必要なときだけ JSON を生成してください。
YAML にアンカーとエイリアスがあります — どうなりますか?
すべて展開されます。`*default` のようなエイリアスは、対応する `&default` アンカーの値に置き換えられるため、JSON 出力にはエイリアスが現れた位置すべてに同じ部分木が繰り返されます。意味的には正しいのですが、共有による重複排除の意図は失われます。JSON → YAML に戻すと、アンカーのないフル展開 YAML が得られます。長い設定ファイルや共有ブロックを多用する k8s マニフェストでアンカーを残したい場合は、YAML のままで YAML ネイティブなツールを使ってください。
`---` で区切られた複数ドキュメント YAML は扱えますか?
対応していません。本コンバータは単一ドキュメントを前提とします。JSON には複数のトップレベルドキュメントという概念がないため、5 ドキュメントの YAML を変換するなら配列(`[{...}, {...}, ...]`)に包む必要があり、これは意味のある変更なので意図して行うべきです。ドキュメントごとに個別に変換するか、配列にまとめたい場合は先に `^---$` で YAML を分割し、結果を結合してください。
出力 YAML が `null` を明示します — 空のままにできますか?
YAML では null を 3 通りで書けます。明示の `null`、チルダ `~`、値を空にする(`key:` のあとに何もない)です。本ライブラリは曖昧さを避けるため明示の `null` を既定とします。往復が安全で、読み手も「空のまま忘れた」のではなく「null と意図した」と判別できます。ベア形式を厳密に要求するツールに合わせる場合は `sed 's/: null$/:/g'` などで後処理してください。意味は同じです。
YAML 出力で文字列が引用符付きになるのはなぜですか?
ベアで書くと意味が変わる場合に、シリアライザは引用符を付けます。`"yes"` は YAML 1.1 パーサが真偽値の true として読まないよう `'yes'` になります。`"123"` は整数ではなく文字列のまま保つために `'123'` になります。`*`・`&`・`!`・`|`・`>` で始まる文字列はそれらのバイトが YAML の意味を持つため引用符が必要です。原則は一貫しており、ベアスカラーが意図した文字列とは別の型としてパースされる場合、ライブラリが引用符を付けます。
本サイトの YAML Validator と何が違いますか?
Validator は検証のみで、YAML の構文をチェックしてエラーを行番号付きで列挙します。Converter は入力をパースし、メモリ上のツリーを別フォーマットへ再出力します。Converter も暗黙に検証は行います(パース失敗はエラー表示)が、それに加えてフォーマット変換まで行います。YAML ファイルに対して可否だけ知りたいときは Validator、実際に別フォーマットが必要なときは Converter を使い分けてください。
関連する概念
JSON と YAML は同じ論理データモデル(スカラー・シーケンス・マッピング)を共有するため、変換作業の大半は同じツリーを取り囲む構文の付け替えになります。JSON は意図的にミニマルです。ダブルクォート文字列、コメントなし、末尾カンマなし、プリミティブは 4 種(文字列・数値・真偽値・null)に配列とオブジェクト。YAML 1.2 は JSON を有効な部分集合として明示するため、JSON ドキュメントは変更なしで YAML としてパースできます。ただし矢印を逆向きにすると常に綺麗には戻りません。YAML はコメント、重複排除のためのアンカーとエイリアス、複数ドキュメントストリーム、ブロックスカラー(`|` は改行保持、`>` は折り畳み)、タグ付き型(`!!set`・`!!binary`・`!!timestamp`)を追加で備え、これらは JSON では行き場がありません。
実用上の境界は **機械 / 人間どちらが消費するか** です。JSON はワイヤフォーマットを支配します。REST API のボディ、NoSQL のドキュメントストア、ブラウザの `localStorage`、ログ転送など。剛性が長所で、コメント行が誤ってパーサを壊すこともなく、空白の曖昧さもありません。YAML は人手編集される設定を支配します。Kubernetes マニフェスト、GitHub Actions ワークフロー、Ansible プレイブック、Docker Compose、Helm チャートなど。柔軟性(コメント・複数行文字列・アンカー)がインデントの厳しさを払い戻します。よくあるパターンは YAML で記述してランタイムには JSON を渡すことで、`helm template` はまさにこれを行います。
隣接する 3 フォーマットも押さえておく価値があります。**TOML** は YAML と同じく設定向けですが、より厳格で曖昧さの少ない構文を持ちます — Rust の `Cargo.toml`、Python の `pyproject.toml`、Hugo の設定で一般的です。**HCL**(HashiCorp Configuration Language)は Terraform を支え、ブロック指向の構文と埋め込み式を備えます。**JSON5 / JSONC** は JSON にコメントと末尾カンマを後付けし、JSON ファミリーを離れずに人手編集の余地を作ります — `tsconfig.json` や VS Code の `settings.json` は後者です。各々が可読性と厳密さのスペクトラム上で異なる点を選んでおり、YAML と JSON はそれぞれの端でツーリングの厚みが最も大きい場所を占めています。