JSON・YAML相互変換
JSONとYAMLを相互に変換します。YAML 1.2 Core Schemaを基準に型を解釈し、データ構造の変換ツールとして扱います(YAML文書の完全な複製・round-trip editorではありません)。
入力例
結果
JSONを入力して「変換」を押してください。
このツールでできること
JSON・YAML相互変換の主な機能です。
- JSONとYAMLを相互に変換できます(変換方向は明示的に選択します)
- YAML 1.2 Core Schemaを基準に型を解釈し、yes/no/on/off等を安易にtrue/falseへ変換しません
- anchor・aliasは展開して変換します(展開回数の上限を超える場合は安全のためエラーになります)
- merge key・Core Schema外のtag・複数文書・1.2以外のバージョン指定は、通常の構文エラーと区別して明示します
- 安全に扱えない巨大な整数を、精度を落として黙って変換することはありません
- YAML→JSON方向では、結果のインデント幅(2/4スペース)を選択できます
手順を見る
- 変換方向(JSON → YAML / YAML → JSON)を選びます
- テキストエリアへJSONまたはYAMLを貼り付けます
- 「変換」ボタンを押します(処理はブラウザ内で完結し、入力はサーバーへ送信されません)
- 結果を確認し、必要に応じてコピーします
こんなときに使えます
こんな場面でJSON・YAML相互変換が役立ちます。
利用シーンを見る
- JSON形式のAPIレスポンスのサンプルを、Kubernetes manifest等のYAML設定へ組み込みたいとき
- 複雑にネストしたYAML設定ファイルをJSONへ変換して、jq等のJSONツールで構造を確認したいとき
- YAMLのyes/no等の型解釈に自信が持てず、変換結果で確認したいとき
- コピー&ペーストしたYAMLにアンカーやmerge key等が含まれていないか確認したいとき
JSON・YAML相互変換の仕組み
このツールの動作の仕組みを説明します。
詳しい解説を見る
YAML 1.2 Core Schemaを基準にしています
YAMLには1.1と1.2という2つの仕様があり、値の型解釈が異なります。本ツールはJSONとの親和性が高いYAML 1.2のCore Schemaを基準に解釈します。これにより、後述のyes/noのような1.1固有の曖昧な自動変換の多くを避けています。
yes/no/on/offは真偽値になりません
YAML 1.2 Core Schemaでは、真偽値として解釈されるのはtrue/True/TRUE/false/False/FALSEのみです。yes/no/on/offは文字列のまま変換されます(大文字小文字を問いません)。timestampらしき値も自動的に日付型へは変換されず、文字列のまま扱われます。
anchor・aliasは展開されますが、一部の情報は失われます
YAMLのanchor(&)・alias(*)は、参照先の値をそのまま展開してJSONへ変換します。ただし、anchor名自体・comment(#以降)・quoteの種類("..."と'...'と無quoteの区別)はJSON側に対応する表現がなく失われます。過大なalias展開はDoS対策のため上限を超えるとエラーになります。
merge key・特殊なtag・複数文書・古いYAMLバージョン指定は非対応です
<<によるマッピングの合成(merge key)、!!timestamp/!!binary等のCore Schema外のtagやcustom tag、---区切りの複数文書、%YAML 1.1等の1.2以外のバージョン指定は、いずれも本ツールのMVPでは非対応です。これらを検出した場合、通常の構文エラーとは区別した専用のエラーメッセージを表示します。
安全に扱えない巨大な整数は変換できません
JavaScriptが誤差なく扱える整数の範囲(±9007199254740991)を超える整数は、精度が変わってしまう可能性があるため、値を黙って丸めるのではなく変換不可のエラーとして扱います。小数(浮動小数点数)は通常の精度で変換します。
よくある質問
YAMLのコメント(#以降)は保持されますか?
いいえ、保持されません。YAML→JSON変換ではコメントは常に失われます。JSONにはコメントを表現する仕組みがないため、JSON→YAML変換でもコメント付きの出力を生成することはありません。
yes/noやon/offはtrue/falseに変換されますか?
いいえ、変換されません。本ツールはYAML 1.2 Core Schemaを基準としており、真偽値として解釈されるのはtrue/false系の表記のみです。yes/no/on/offは大文字小文字を問わず文字列のまま扱われます。
アンカー(&)とエイリアス(*)には対応していますか?
はい。エイリアスの参照先の値をそのまま展開してJSONへ変換します。ただし、アンカー名自体はJSON側に対応する表現がないため失われます。展開回数が過大な場合は安全のためエラーになります。
merge key(<<)には対応していますか?
いいえ、対応していません。<<というキーがマージ目的で使われていると判断できる場合(クォートされていないプレーンな<<)は専用のエラーになります。"<<"のようにクォートされた文字列キーとしての利用は、通常のキーとしてそのまま変換されます。
巨大な整数を含むJSON/YAMLは変換できますか?
JavaScriptが誤差なく扱える整数の範囲(±9007199254740991)を超える整数は変換できません。値を黙って丸めて精度を落とすことを避けるため、変換不可のエラーとして明示します。
入力したJSON/YAMLはサーバーに送信されますか?
いいえ。JSON/YAMLの解析・変換はすべてブラウザ内で行われ、サーバーへの送信や保存は行いません。