JSON と XML を相互に変換するには

「JSON → XML」は JSON オブジェクトまたは配列を XML 文書に変換し、「XML → JSON」は XML 文書を JSON として読み取ります。どちらもページ内で実行されるため、貼り付けた内容は送信されず、結果はボタンの下の領域に表示されます。

2 つの例ボタンは同じ小さなカタログを両方の形式で読み込みます。JSON の例を変換すると XML の例になり、その XML の例を変換し直すと JSON の例に戻ります。

  1. 「XML の例」または「JSON の例」でサンプルを読み込むか、ご自身の JSON オブジェクト、JSON 配列、XML 文書をテキストエリアに貼り付けてください。
  2. 「JSON → XML」または「XML → JSON」を押します。結果の上にある状態行にルート要素と要素・属性の個数が表示され、変換できない場合は理由が表示されます。
  3. 解析できない入力では、JSON は文字位置、XML は行と列がメッセージに示され、直前の結果は消去されるため古い出力が画面に残りません。
  4. 「JSON を整形」をオンにすると JSON 出力が 2 スペースで字下げされ、オフにすると 1 行にまとまります。XML 出力は常に字下げされます。「結果をコピー」でコピーし、「クリア」でテキストエリアを空にできます。

変換でデータがどう扱われるか

JSON が XML になる仕組み

文書のルート要素は必ず 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 /> になります。

名前は壊れたまま出力せず修復します。キーにスペース、<、& が含まれる場合や、数字で始まる場合はアンダースコアで書き、状態行に変更した名前の個数を表示します。値の中のマークアップはエスケープし、属性値の引用符・改行・タブは &quot;、&#10;、&#9; として書き出すため、文書は整形式のままです。

XML が JSON になる仕組み

属性は - を付けて返し、テキストだけの要素は文字列に、子要素を持つ要素はオブジェクトに、同じ名前が複数回現れる場合は配列になります。<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 の検証、名前空間の処理(名前に含まれるコロンはアンダースコアで書き出します)、型の推論は行いません。数千レベルのネストを含む文書は、途中までの結果を残さずメッセージで拒否します。

最近使ったツール: