JSON→XML変換

JSON形式のデータをXMLに変換します。@attributesは要素の属性に、#textはテキスト内容に、配列は同名の兄弟要素に戻す規約でXML化し、ブラウザ上だけで完結して確認できます。姉妹ツールのXML→JSON変換とセットで使えます。

JSON→XML変換の規約

JSON と XML はどちらも構造化データの形式ですが、表現できるものが違います。XML には「属性」と「テキスト内容」という、JSON には存在しない概念があります。そのため素直に変換しようとすると、属性をどう表すか・同じ名前の要素が並ぶ配列をどう戻すかで必ず迷いが生じます。このツールは広く使われている規約を採り、`@attributes` を要素の属性に、`#text` をテキスト内容に、配列を同名の兄弟要素に戻します。

例えば `{"book": {"@attributes": {"id": "1"}, "#text": "タイトル"}}` は `タイトル` になります。`{"item": [1, 2]}` は `12` という2つの兄弟要素になります。テキスト内容では `&` `<` `>` を、属性値ではさらに `"` を実体参照へ自動的にエスケープするため、値に記号が含まれていても壊れた XML にはなりません。処理はすべてブラウザー内で完結します。

JSON を XML に変換する手順

  1. JSON を貼り付ける 変換したい JSON をそのまま入力します。オブジェクトでも配列でも構いません。
  2. 属性にしたいものは @attributes に置く 要素の属性として出したいキーは `@attributes` オブジェクトの中へまとめます。
  3. テキスト内容は #text に置く 属性と本文の両方を持つ要素にしたい場合、本文にあたる値を `#text` に入れます。
  4. 結果を確認してコピーする インデントされた XML が生成されます。そのまま設定ファイルや API のリクエストへ貼り付けられます。

使いこなすためのヒント

  • `@attributes` キーにオブジェクトを持たせると、そのオブジェクトの各プロパティが変換後の要素の属性になります。
  • `#text` キーは、属性や子要素と混在する要素のテキスト内容を表すために使います。属性を持たない単純な要素は文字列を直接値にするだけで構いません。
  • 同じキーに配列を持たせると、配列の各要素が同名の兄弟要素として繰り返し出力されます。
  • 値に `null` を指定すると、属性・テキスト・子要素を持たない空の自己終了タグ(``)になります。
  • このツールは姉妹ツールの「XML→JSON変換」の出力形式(ルート要素名をキーとするオブジェクト、トップレベルのキーは1つだけ)を入力として想定しています。

こんなときに使えます

XML しか受け付けない API に送る

手元のデータが JSON でも、送信先が XML を要求する場合に変換できます。レガシーな業務システムの連携で起こりがちです。

設定ファイルの形式を移行する

JSON で書かれた設定を XML ベースのツールへ移す際の下書きとして使えます。

XML の構造を JSON で考える

入れ子の深い XML を直接書くのは骨が折れますが、JSON で組み立ててから変換すれば見通しが良くなります。

変換規約そのものを確かめる

`@attributes` や `#text` がどう反映されるかを実際に試して、自作の変換処理の仕様を決める参考にできます。

JSON→XML 変換の用語

属性(attribute)
`` の `id="1"` の部分です。JSON には対応する概念が無いため、本ツールでは `@attributes` という特別なキーで表します。
テキスト内容(#text)
`タイトル` の「タイトル」にあたる部分です。属性と同時に持たせたい場合に `#text` を使います。
実体参照(エスケープ)
`&` を `&` のように書き換えることです。**`&` を最初に変換しないと、後から作った `<` の `&` まで二重に変換されてしまいます。**
同名の兄弟要素
XML では同じタグ名の要素を並べて配列を表します。JSON の配列はこの形に戻ります。
ルート要素
XML は最上位にただ1つの要素を持つ必要があります。JSON のトップレベルが複数のキーを持つ場合、その扱いに注意が要ります。

よくある質問

`@attributes` という名前のキーにオブジェクトを持たせると、そのオブジェクトの各プロパティが変換後のXML要素の属性になります。例えば `{"@attributes": {"category": "fiction"}}` は `category="fiction"` という属性に変換されます。

同じキーに配列を指定すると、配列の各要素が同名の兄弟要素として複数回出力されます。例えば `"book": [{"title": "A"}, {"title": "B"}]` は `` タグが2つ生成されるXMLに変換されます。

最も多い原因はJSONの構文エラー(カンマの過不足・クォート漏れ)です。またXMLはルート要素を1つだけ持つ必要があるため、トップレベルに複数のキーがあるJSONや、ルートが配列になっているJSONもエラーになります。

はい。サイト内の「XML→JSON変換」ツールが逆方向の変換に対応しています。同じ変換規約を採用しているため、双方向で行き来しても内容が保たれます。

本ツールは「XML→JSON変換」ツールの出力形式(`@attributes`・`#text`・配列・nullを使った規約)を前提としています。この規約に沿わない自由な形式のJSON(例: 数値や真偽値を多用したAPIレスポンスそのまま)は、意図通りのXML構造にならない場合があります。
ツールくん

余談ですが ― JSONからXMLへ「戻す」ときに気をつけたいこと

XMLからJSONへの変換は「情報の圧縮」に近い作業です。属性・テキスト・子要素という3種類の情報を持てるXMLに対し、JSONはキーと値の単純な対応関係しか持てないため、変換時に何らかの規約(本ツールでは `@attributes`/`#text`/配列/nullという4つの取り決め)を採用する必要があります。この規約さえ守られていれば、JSONからXMLへ「戻す」変換は機械的に一意に定まりますが、規約に沿わない自由形式のJSONを無理にXML化しようとすると、属性なのか要素なのかの区別がつかず、変換結果が期待と異なることがあります。

実務では、レガシーなXML APIをいったんJSONに変換してJavaScriptで加工し、再びXMLに戻して別システムに送信するという場面があります。例えばSOAP形式のWeb APIのレスポンスをJSONで扱いやすく加工した後、同じSOAP形式のリクエストとして送り返す必要がある場合などです。このような往復変換では、変換規約が一貫していることが何より重要で、途中で規約の異なるツールを挟むと、属性とテキストの対応関係が崩れてしまうことがあります。

本ツールが厳密に「トップレベルのキーは1つだけ」というルールを課しているのは、XML自体の仕様(ルート要素は必ず1つ)を反映したものです。もし複数のトップレベルキーを持つJSONを変換したい場合は、あらかじめ共通の親キー(例: `root`)でラップしてから本ツールに入力することで、単一ルート要素のXMLとして出力できます。