YAML → JSON 変換ツール
YAML(Kubernetes マニフェスト、Docker Compose、CI の設定)を貼り付けると、すぐにきれいな JSON が得られます。エラーは正確な行をポインター付きで示します。
ブラウザ内で動作登録不要アップロードなし
JSON 出力
YAML → JSON 変換の使い方
- 左の欄に YAML を貼り付けるか、
.yaml/.ymlファイルを開きます。 - 入力と同時に右側に JSON が表示されます。出力のインデントはスペース 2 個、スペース 4 個、タブから選べます。
- キーをアルファベット順にするにはキーを並べ替えにチェックを入れます。設定の比較に便利です。
- YAML が不正な場合は、ステータスバーに行と列が表示され、その下に問題のある行が
^マーカー付きで表示されます。 - JSON をコピーまたはダウンロードするか、入れ替えを押して YAML に戻します。
YAML と JSON の対応関係
JSON は YAML 1.2 のサブセットなので、YAML のマッピングはすべて JSON のオブジェクトに、シーケンスは配列に、スカラーは文字列、数値、真偽値、null になります。YAML 固有の機能は変換時に解決されます。
- コメント(
# …)は、JSON にコメントがないため削除されます。 - アンカーとエイリアス(
&base、*base、<<: *base)は完全なコピーに展開されます。 - タイムスタンプ(
2024-01-02など)は ISO 8601 の文字列になります。 - 複数行の文字列(
|のリテラルブロックと>の折り畳みブロック)は、\nエスケープを含む通常の文字列になります。
複数ドキュメントの YAML
Kubernetes のマニフェストでよくあるように、1 つのファイルに --- で区切った複数の YAML ドキュメントを含めることができます。JSON には相当するものがないため、コンバーターはドキュメントごとに 1 要素の JSON 配列を返し、ステータスバーでその旨を知らせます。末尾に 1 つだけある --- は無視されます。
YAML 1.1 と 1.2 の落とし穴
このコンバーターは現行仕様の YAML 1.2 に従います。多くの古いツール(PyYAML、Ruby の Psych、一部のバージョンの Kubernetes や Ansible)は今も YAML 1.1 として読み込み、ルールが異なります。
- ノルウェー問題:YAML 1.1 では
country: noがfalseを意味するため、ノルウェーの国コードNOが消えてしまいます。yes、on、off、y、nも同様です。YAML 1.2 で真偽値として扱われるのはtrueとfalseだけです。 - 8 進数:
0755は 1.1 では 8 進数ですが、1.2 ではただの 10 進数です(1.2 では0o755を使います)。安全のため、ファイルモードは引用符で囲みましょう。 - 60 進数:1.1 では
22:30が数値 1350 として解析されることがあります。時刻や"8080:80"のようなポートマッピングは引用符で囲みましょう。
JSON → YAML の変換では曖昧な文字列('no'、'on'、'y')を自動的に引用符で囲むため、生成される YAML はどちらのバージョンでも同じように読まれます。
よくある質問
YAML はどこかにアップロードされますか?
いいえ。解析はオープンソースの js-yaml ライブラリを使ってブラウザ内で行われます。シークレットや社内のホスト名を含む設定もお使いのマシンから出ません。
YAML が「bad indentation」で失敗するのはなぜですか?
YAML のネストはスペースで定義され、インデントにタブは使えません。兄弟関係のキーが正確に揃っているか、リスト要素(
-)が親キーの下で一貫してインデントされているかを確認してください。YAML のコメントはどうなりますか?
削除されます。JSON にはコメントの構文がないため、コメントを引き継ぐことはできません。YAML に戻しても復元されません。
<code>no</code> が文字列のままなのはなぜですか?
このツールは YAML 1.2 に従っており、真偽値は
true/false だけです。古い YAML 1.1 のパーサーは no、yes、on、off を真偽値に変換してしまいます(「ノルウェー問題」)。複数のリソースを含む Kubernetes マニフェストも変換できますか?
はい。
--- で区切られた各リソースが出力の JSON 配列の 1 要素になり、jq や、JSON のリストも受け付ける kubectl apply -f - にそのまま使えます。