使い方
上のタブで変換の方向(JSON → YAML または YAML → JSON)を選び、入力欄に貼り付けると結果が表示されます。JSON → YAMLではインデント(半角スペース2つ・4つ)とキーの並べ替えを、YAML → JSONではインデント(半角スペース2つ・4つ・タブ)と複数ドキュメントを配列にまとめるかどうかを選べます。結果はコピーするか、.yaml・.jsonファイルとしてダウンロードできます。「ファイルを開く」で.json・.yaml・.ymlファイルを読み込むと、拡張子に合わせて変換の方向が決まります。方向を切り替えると、直前の結果が入力欄に移るので、逆向きの変換を試せます。入力が正しくない場合は、結果の代わりに問題のある行・列とその周辺のコードを表示します。
初回の変換時にyamlライブラリを読み込みます。
JSONとYAMLの関係
どちらの形式も、オブジェクト(マッピング)・配列(シーケンス)・文字列・数値・真偽値・nullでデータを表します。JSONは波かっこ・角かっこ・二重引用符で構造を示しますが、YAMLは主にインデントと-・:で示すため、人には読み書きしやすくなっています。2009年に公開されたYAML 1.2は、YAMLをJSONの厳密な上位集合にすることを主な目的としていました。そのため正しいJSONはほとんどの場合YAMLとしても読めて、YAML → JSONモードにJSONを入れても変換できます。逆は成り立ちません。コメント・アンカー・複数ドキュメントなどJSONにない機能は、JSONに移すときに消えるか展開されます。
変換で変わるもの
- コメント:JSONの文法(RFC 8259)にはコメントを書く場所がないため、YAML → JSONの変換ではすべて消えます。YAMLの仕様でも、コメントは表現上の要素にすぎずデータに影響しないと定められています。説明を残したい場合は、変換する前に
_comment: "staging port"のようにキーと文字列の値として書いておいてください。結果には"_comment": "staging port"として入ります。#があれば何でもコメントになるわけではありません。http://a.com/#fragのように直前に空白がない#や、引用符の中の#は値の一部として残ります。コメントしかない入力は「変換するYAMLドキュメントがありません。コメントだけになっていないか確認してください。」というエラーになります。 - アンカー・エイリアス(
&name、*name):参照先の値をコピーして展開します。エイリアスが指数的に増える「Billion Laughs攻撃」を防ぐため、エイリアスの展開が多すぎる場合は変換を中止します(yamlライブラリの初期上限maxAliasCount100)。攻撃ではない通常のファイルでも、1つのアンカーをエイリアスで100回参照すると同じエラーで止まります(99回までは変換でき、値の大きさは関係なく、<<のマージも1回と数えます)。エイリアスを含む値をさらにエイリアスで参照すると回数が掛け算になり、もっと早く止まります。その場合は、そのアンカーを参照するエイリアスの一部を実際の値に書き換えてください。 - マージキー(
<<):YAML 1.2のスキーマにはありませんが、docker composeなどの設定ファイルで広く使われているため、YAML 1.1のマージ規則どおりに展開します。 - 複数ドキュメント(
---):YAML → JSONで「複数ドキュメント(—)を配列にまとめる」がオン(初期設定)なら、ドキュメントごとに1要素のJSON配列に変換し、結果の欄に「ドキュメント3件」のように件数を表示します。オフにすると最初のドキュメントだけを変換し、残りのドキュメント数を警告で知らせます。ドキュメントが1つだけなら、この設定にかかわらず配列で囲みません。ファイルの末尾に中身のない---だけが残っていると、空のドキュメントとして数えられ、配列の最後にnullが1つ付きます。不要ならその行を削除してください。JSON → YAMLは、最上位が配列でも---で区切ったドキュメントには分けず、常に1つのドキュメントとして出力します。 - キーの順序:YAMLとJSONのどちらも、仕様上オブジェクトのキーに順序はありませんが、このツールは入力の順序をそのまま保ちます(
"2"のような数字の形のキーも先頭に移しません)。JSON → YAMLで「キーを並べ替える」をオンにすると、すべてのオブジェクトのキーをUnicodeのコード単位順に並べ替えます。 - タグ:
!Refのようにこのツールが知らないタグは外し、値だけを移して警告を表示します。このとき、タグの付いた値は3やtrueのように書いても文字列になり、タグの付いた配列・オブジェクトは構造と中の値をそのまま移します。 - JSONにない値:
.inf・.nanはJSONにないためnullに置き換えて警告します。配列やオブジェクトをキーにしたYAMLは、そのキーをJSONテキストに変換します。 - 重複キー:YAMLで1つのマッピングに同じキーが2回あると仕様違反なのでエラーにします。JSONで同じキーが2回あると、ブラウザの
JSON.parseと同じく最後の値だけを残して警告します。
ノルウェー問題:yes・no・on・off
YAML 1.1ではy・yes・on・n・no・off(大文字・小文字の変形を含む)まで真偽値として読んでいました。そのため国コードの一覧にノルウェーのNOを引用符なしで書くとfalseに変わってしまい、これが「ノルウェー問題」と呼ばれています。YAML 1.2のコアスキーマは真偽値をtrue・false(とTrue・TRUEのように大文字で書いた形)に絞りました。このツールもこの基準で読むので、NO・yes・offは文字列のままです。YAML 1.1の方式で読むオプションはないので、真偽値として受け取りたい値はYAML側でtrueかfalseに書き換えてください。tRueのように大文字と小文字が混ざった書き方は文字列で、"true"のように引用符で囲んだ値も文字列です。
ただし、今もYAML 1.1の規則で読むツールがあります。そのためJSON → YAMLの結果では、1.1のパーサーが別の値として読みうる文字列を二重引用符で囲みます。真偽値の形の値(yes・no・on・off・y・nなど)、日付の形(2026-09-28)、60進数の形(1:20)、アンダースコアを含む数値の形(1_000)、マージキー<<が対象です。引用符で囲んだ値は、1.1でも1.2でも文字列です。
大きな整数と数値の精度
JavaScriptの数値はIEEE 754の倍精度なので、2^53 - 1(9007199254740991、16桁)を超える整数は末尾の桁が変わることがあります。このツールはどちらの方向でも整数をBigIntとして扱うため、64ビットのIDのような大きな整数も桁をそのまま移します。JSON → YAMLでは1.0のような末尾の0も入力のまま残します。YAML → JSONでは1.0は1になります。
YAML → JSONでは、引用符なしで書いた01234は整数として読まれて1234になり、同じように1.10は1.1、0x1Fは31、0o14は12になります。郵便番号・バージョン・コードのように書いたとおりに残したい値は、YAMLで"01234"のように引用符で囲んでください。そうすればJSONでも文字列として出力されます。JSON → YAMLは、"01234"や"12345678901234567890"のような数値の形をした文字列に引用符を付けて出力するので、読み直しても文字列のままです。
小数はどちらの方向でも倍精度の数値として扱うため、0.1234567890123456789のように有効桁数の多い小数は、どちらの方向でも最も近い倍精度の値に丸められます。指数表記の数値は書き方が変わります。JSON → YAMLでは1e3が1e+3に、YAML → JSONでは1e3が1000になります。倍精度の範囲を超える1e400のような値は、JSON → YAMLで.infになります。結果のJSONを受け取るプログラムが大きな整数を通常の数値として読むと、そちらで精度が落ちることがあるので、正確な値が重要なら元のデータで文字列にしておくのが安全です。
こんなときに使えます
- Kubernetesのマニフェスト:慣例ではYAMLで書きますがJSONも使え、kubectlはAPIに送るときにマニフェストをJSONなどに変換します。APIの応答(JSON)をマニフェスト(YAML)に移したり、その逆を確認したりするときに便利です。
- GitHub Actionsのワークフロー:
.github/workflowsフォルダーにある.yml・.yamlファイルで、YAMLの文法で書きます。スクリプトが生成したJSONの設定をワークフローに移すときに役立ちます。 - docker compose:既定のファイル名は
compose.yamlで、アンカー・エイリアスとマージキー(<<)でサービスの設定を再利用します。YAML → JSONに変換すると、マージを展開した最終的な値をひと目で確認できます。
