YAMLからJSONへの変換ツール

YAMLをJSONに、またはJSONをYAMLに、入力しながらリアルタイムで変換します。すべてブラウザ内で動作し、貼り付けた内容がアップロードされることはありません。

設定ファイルを、どこでも使えるように

YAMLはDocker Compose、Kubernetes、CI設定でよく使われます。

YAMLは人間が読み書きしやすい形式ですが、ほとんどのAPIやプログラミング言語が想定しているのはJSONです。このツールはブラウザ内だけで、双方向にこの2つを変換します。

対応している内容

ブロック形式・フロー形式のマッピングとシーケンス、引用符付き・プレーンなスカラー値、数値、真偽値、null、コメントに対応しています。アンカー/エイリアス、複数ドキュメントファイル、複数行のブロックスカラー(| / >)には対応していません。

仕組み

YAMLからJSONへの変換は、このページ専用に書かれた小さな再帰下降パーサーで行われます。まずコメントを除去し(引用符付き文字列内の#が誤って消えないよう慎重に処理します)、各行のインデントを記録した上で、YAMLの定義どおりに構造を構築します。インデントはネストしたマップを開き、-で始まる行はシーケンスを構築し、それ以外はすべてスカラー値になります。スカラー値は実際のYAMLパーサーと同じルールで型付けされます。true/falseは真偽値に、~nullはnullに、引用符のない数字は数値に、引用符付き文字列はそのまま文字列となり、インラインの[a, b]{k: v}のようなフロー構文も処理されます。結果は選択したインデントでJSON.stringifyによりシリアライズされます。JSONからYAMLはその逆で、JSON.parseで入力を検証した後、エミッターが値をたどってインデント付きのYAMLを書き出し、数値・真偽値・nullと誤読されうる文字列には引用符を付けます。

知っておく価値のある意図的な選択があります。このパーサーはリテラルのtruefalseのみを真偽値として扱います。古いYAML 1.1パーサーはyesnoonoffも変換してしまい、これがノルウェーの国コードNOが設定ファイル内で有名にもfalseになってしまう原因です(いわゆる「ノルウェー問題」)。ここでは見た目どおりの文字列のまま保たれます。

これは意図的に小さく保たれたサブセットパーサーです。アンカーとエイリアス(&/*)、複数ドキュメントファイル、ブロックスカラー(|>)には対応していないため、これらの機能を使う複雑なKubernetesマニフェストは正しく往復変換できません。日常的な設定変換であれば、実際に貼り付ける内容はカバーされています。

変換はキーストロークのたびに、すべてタブ内で完結します。パーサーサービスは一切呼び出されません。入力中はDevToolsのNetworkパネルが静かなままなので、ホスト名やシークレットが詰まった設定ファイルが端末から出ていくことはありません。