ページ内で JSON と XML を相互に変換します。キーは要素に、- で始まるキーは属性になり、繰り返し現れる要素は配列として戻ります。解析できない入力は壊れた結果ではなく、解析が止まった位置とともに通知します。
ブラウザ内でローカルに実行「JSON → XML」は JSON オブジェクトまたは配列を XML 文書に変換し、「XML → JSON」は XML 文書を JSON として読み取ります。どちらもページ内で実行されるため、貼り付けた内容は送信されず、結果はボタンの下の領域に表示されます。
2 つの例ボタンは同じ小さなカタログを両方の形式で読み込みます。JSON の例を変換すると XML の例になり、その XML の例を変換し直すと JSON の例に戻ります。
文書のルート要素は必ず 1 つです。最上位のキーが 1 つだけならそれがルート要素になります({"user":{"name":"Ann"}} は <user><name>Ann</name></user>)。キーが複数ある場合、最上位が配列の場合、1 つのキーの値が配列の場合は <root> で包み、名前を持たない配列の要素は <item> として書き出します。
要素の中では、キーは子要素になり、配列は項目ごとに同じ要素を繰り返します。- で始まるキーは属性に、#text は要素のテキストになります。つまり {"a":{"-x":"1","#text":"hi"}} は <a x="1">hi</a> となり、「XML → JSON」が返す形と同じです。このため 2 つの方向を続けて使えます。null と "" はどちらも <name /> になります。
名前は壊れたまま出力せず修復します。キーにスペース、<、& が含まれる場合や、数字で始まる場合はアンダースコアで書き、状態行に変更した名前の個数を表示します。値の中のマークアップはエスケープし、属性値の引用符・改行・タブは "、 、	 として書き出すため、文書は整形式のままです。
属性は - を付けて返し、テキストだけの要素は文字列に、子要素を持つ要素はオブジェクトに、同じ名前が複数回現れる場合は配列になります。<r><i>1</i><i>2</i></r> は {"r":{"i":["1","2"]}} となり、<i> が 1 つだけなら文字列のままです。XML に型はないため値は文字列として渡ります。XML の 24.90 は JSON では "24.90" です。
内容のない要素は空文字列になり、要素内のテキストは空白や改行も含めてそのまま保持し、要素間の字下げは無視します。コメントは読み飛ばし、CDATA セクションはテキストとして読み取り、子要素と同居するテキストは #text キーにまとめます。
変換はページ内で実行されます。ネットワークを遮断しても動作し、リクエストは送信しません。外部に出せない文書でもここで変換できます。120,000 文字までの結果は色分けし、それより大きい結果はプレーンテキストで表示します。このページの Chrome での実測では、1,000 行(JSON 45 KB → XML 99 KB)は色分けありで約 0.8 秒、5,000 行(233 KB → 503 KB、戻して JSON 618 KB)は合計約 0.2 秒です。
これは形式の変換ツールであり、スキーマのツールではありません。XSD や DTD の検証、名前空間の処理(名前に含まれるコロンはアンダースコアで書き出します)、型の推論は行いません。数千レベルのネストを含む文書は、途中までの結果を残さずメッセージで拒否します。