JSON ↔ YAML 変換

JSON と YAML を双方向に変換。エラーは行番号付きで表示。

Loading…

すべての処理はブラウザ内で実行されます — ファイルや入力はサーバへ送信されません。

使い方

変換方向(JSON → YAML / YAML → JSON)を切り替え、左に元データを貼り付けると、右に変換結果が表示されます。Swap ボタンは現在の出力を入力欄に戻して方向を反転させるため、設定の往復確認や、両方向の変換結果を見比べるのに便利です。パースエラーは行・列番号で示されるため、構造的な問題を素早く見つけられます。

フォーマットの好みが異なるシステム間で設定を移すときに使ってください。誰かが JSON で書いた Kubernetes マニフェストを `kubectl` が期待する YAML に変換する、API 出力から Helm の `values.yaml` を生成する、Terraform の JSON 変数ファイルを Kustomize パッチに流し込む、といった場面です。両フォーマットはデータモデルが同じ(JSON は YAML 1.2 の厳密な部分集合)で、ほとんどの設定では往復で情報が失われません。処理は `yaml` ライブラリでブラウザ内完結します。内部ホスト名やシークレットを含む設定でも安心して使えます。

コンパクトな JSON → 読みやすい YAML

入力
{"name":"sample","version":"1.0.0","ports":[80,443],"env":{"production":true,"region":"us-east-1"}}
出力
name: sample
version: 1.0.0
ports:
  - 80
  - 443
env:
  production: true
  region: us-east-1

最も頻繁な用途です。マシンが吐く JSON(API レスポンス・Terraform プラン出力など)を、人がプルリクエストで読みやすいインデント YAML に変換します。2 スペースインデントは Kubernetes・Helm・GitHub Actions の慣例に揃っています。

コメント付き YAML → JSON(コメント消失)

入力
# Production config
name: api
version: 1.0.0
replicas: 3 # bumped 2024-Q2
features:
  - search   # GA
  - billing  # beta
出力
{
  "name": "api",
  "version": "1.0.0",
  "replicas": 3,
  "features": [
    "search",
    "billing"
  ]
}

JSON にはコメント構文がないため、`#` 行とインラインコメントはすべて消えます。アンカー(`&base`)とエイリアス(`*base`)も対象値に展開されます。コメントを残したい場合は、YAML を正本として保持し、消費時にのみ JSON へ再変換する運用にしてください。

YAML の日付 → JSON の文字列

入力
name: release
released: 2024-05-27
expires: 2025-05-27T00:00:00Z
出力
{
  "name": "release",
  "released": "2024-05-27",
  "expires": "2025-05-27T00:00:00.000Z"
}

YAML には日付 / タイムスタンプというスカラー型がありますが、JSON にはありません。コンバータは JSON 出力時に `Date` オブジェクトを ISO 8601 文字列にシリアライズします。結果を再び JSON → YAML すると `released` フィールドは日付ではなく文字列として戻るため、往復で型が常に保たれるとは限りません。

よくある質問

往復変換は無損失ですか?

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 はそれぞれの端でツーリングの厚みが最も大きい場所を占めています。

関連記事

関連ツール