🔄 JSON⇔XML変換
JSONとXMLを、ブラウザ内だけで相互変換します。JSON→XMLはルート要素名とインデント幅を指定でき、XML→JSONは属性を @_、テキストを #text の規約で表現し、同名の要素は配列にまとめます。
入力
最上位のJSONがキー1つのオブジェクトのときは、そのキー名を自動でルートに使います(この欄は無視)。
XML
入力データはブラウザ内だけで処理され、サーバーには送信されません。変換ロジックは外部ライブラリを使わない自前実装です。
解説
JSONとXMLは、どちらも構造化データを表す代表的なフォーマットですが、モデルが異なります。JSONはオブジェクト(キーと値)・配列・文字列・数値・真偽値・nullという型を持つのに対し、XMLは要素(タグ)・属性・テキストからなり、値の型という概念がありません。本ツールは、この2つを外部ライブラリを使わない自前ロジックでブラウザ内だけで相互変換します。APIのレスポンスや設定ファイルを、扱いやすい方の形式に変換したいときに使えます。
JSON→XMLでは、オブジェクトのキーを要素名に、配列を同名要素の繰り返しに、スカラー値を要素のテキストに変換します。属性を出力したいときはキーを「@_属性名」(例: "@_id")にし、要素に属性とテキストの両方を持たせたいときは「#text」キーにテキストを入れます。最上位がキー1つのオブジェクトのときは、そのキーをルート要素名として使い、それ以外(複数キーのオブジェクト・配列・単独の値)は指定したルート要素名で包みます。XMLの要素名に使えない文字(空白や記号など)は自動的に「_」へ置き換えます。インデントはスペース2/4・タブ・最小化(1行)から選べます。
XML→JSONでは、ブラウザ標準の DOMParser(text/xml)で解析します。要素はオブジェクトに、属性は「@_属性名」、テキストノードは「#text」というキーで表現し、テキストだけを持つ要素は文字列に短縮します(例: <b>1</b> → "1")。同じ名前の子要素が複数あるときは配列にまとめます。ルート要素の名前が、そのまま最上位のキーになります。XMLに型情報が無いため、数値や真偽値もすべて文字列として出力される点に注意してください(例: <price>1980</price> → "1980")。
たとえば {"root":{"item":[1,2],"name":"x"}} をXML化すると <root><item>1</item><item>2</item><name>x</name></root> となり、それを再びJSON化すると {"root":{"item":["1","2"],"name":"x"}} と、ルート・配列・要素名といった主要な構造が保たれます(数値は文字列化されます)。構文エラーのあるJSON/XMLは、その場所を含むエラーメッセージを表示します。入力データはすべて端末内(ブラウザ内)で処理し、どこにも送信しません。オフラインでも動作します。
よくある質問
入力したデータはどこかに送信されますか?
いいえ。すべての変換はお使いのブラウザ内(JavaScript)だけで行われ、入力データがサーバーに送信されることはありません。業務データや個人情報を含むデータでも安全に変換でき、オフラインでも利用できます。
XMLの属性はJSONでどう表現されますか?
属性は「@_属性名」というキーになります。例えば <note lang="ja">在庫あり</note> は {"note":{"@_lang":"ja","#text":"在庫あり"}} に変換されます。逆にJSON→XMLでは、"@_lang" のように @_ で始まるキーを属性として書き出します。
同じ名前のタグが複数あるとどうなりますか?
同名の子要素は自動的に配列にまとめられます。例えば <root><item>1</item><item>2</item></root> は {"root":{"item":["1","2"]}} になります。逆にJSONの配列は、JSON→XMLで同名要素の繰り返しとして出力されます。
数値がXML→JSONで文字列になります。なぜですか?
XMLには型の概念が無く、要素の中身はすべてテキストだからです。そのため <price>1980</price> は数値ではなく文字列 "1980" として出力します。数値として扱いたい場合は、変換後に利用側で数値化してください。
ルート要素名はどう決まりますか?
JSON→XMLでは、最上位がキー1つのオブジェクトのときはそのキー名をルート要素に使います(ルート要素名の欄は無視されます)。複数キーのオブジェクトや配列・単独の値のときは、指定したルート要素名(既定 root)で全体を包みます。
要素にテキストと属性を同時に持たせられますか?
はい。JSON側で "#text" キーにテキスト、"@_属性名" キーに属性を入れます。例えば {"note":{"@_lang":"ja","#text":"在庫あり"}} は <note lang="ja">在庫あり</note> になります。
JSONのキーがXMLの要素名に使えない文字を含む場合は?
XMLの要素名は空白や多くの記号を含められず、先頭に数字も使えません。そうしたキーは「_」に自動置換し、必要に応じて先頭に「_」を補って妥当な名前にします。厳密な往復(ラウンドトリップ)が必要な場合は、要素名に使える文字だけをキーにしてください。
変換結果を保存できますか?
「結果をコピー」でクリップボードにコピーできるほか、「ダウンロード」で .xml または .json ファイルとして保存できます。インデント幅で「最小化(1行)」を選べば、余白を詰めたコンパクトな出力も得られます。