このツールとは?
XMLとJSONはどちらもツリー構造のデータ形式ですが、使われる場面が異なります。レガシーな業務用API、SOAPサービス、RSS/Atomフィード、多くの設定ファイルは今でもXMLを使う一方、モダンなREST APIやJavaScriptのコードはほぼ例外なくJSONを使います。このツールは両者を変換することで、新旧システムを連携させる際にどちらか一方を手書きする手間を省きます。
変換ロジックは、XMLを読み込む際にブラウザ標準のDOMParser APIを直接利用し、生成の際はW3C XML 1.0仕様で定義された構造に従います。そのため生成されるXMLは整形式(well-formed)であり、受け付けるXMLもブラウザや標準準拠のXMLライブラリと同じ方法で解析されます。
XMLにはJSONにない概念(属性、テキストと要素の混在コンテンツ、単一のルート要素の必須化)があり、JSONにはXMLにない概念(ネイティブな配列、真偽値、数値)があります。そこでこのツールは広く使われている変換規則を採用しています。XML属性`name="value"`はJSONキー`"@_name": "value"`になり、要素のテキスト内容は子要素も属性もない場合はそのまま文字列値に、それ以外の場合は属性と並ぶ`"#text"`キーになり、同名の繰り返し兄弟要素はJSON配列になります。
なぜこれを使うのか?
- 双方向対応——同じ画面でJSONからXML、XMLからJSONの両方に変換できます。
- ネストを正しく処理——ネストされたJSONオブジェクトは任意の深さでネストされたXML要素になり、その逆も同様です。
- 配列は繰り返し要素にマッピング——あるキー配下のJSON配列は同じ数だけ同名のXML兄弟要素になり、繰り返しのXMLタグもJSON配列として戻ります。
- XML属性を保持——`@_属性名`という規則を使うため、属性データが気づかないうちに失われることはありません。
- クリップボードへのコピー、または.jsonや.xmlファイルとしてダウンロード可能。
- 100%クライアントサイド——貼り付けた内容はどこにもアップロードされません。
使い方
- 「XML → JSON」または「JSON → XML」の方向を選びます。
- 入力欄にデータを貼り付けます。
- 「Convert」をクリックします。
- 結果を確認し、コピーするか「Download」をクリックしてファイルとして保存します。
例
入力
{"user":{"name":"Alice","age":30}}出力
<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>Alice</name>
<age>30</age>
</user>唯一のトップレベルJSONキー("user")がXMLのルート要素になります。JSONにトップレベルキーが複数ある場合、XMLはルート要素を1つしか持てないため、ツールは全体を<root>要素で包みます。
実践的なヒント
- レガシーなXML設定(古いアプリの設定ファイルなど)をモダンなJSONベースのシステムに移行する場合:XMLを貼り付けて変換し、必要に応じてフィールド名を調整します。
- JavaScriptからSOAPやXML-RPCのエンドポイントをテストする場合:送信前にここでJSONリクエストのペイロードをXMLに変換するか、XMLレスポンスをJSONに変換して見やすく確認できます。
- JSONでXMLの繰り返し要素に相当するデータを配列として表現している場合は、XMLがルート要素を複数持てないため、トップレベルの裸の配列ではなく、まず単一のキーの下に配列をネストさせてください(例:{"items":{"item":[1,2,3]}})。
@_属性規則が重要な理由
JSON/XML変換で最も厄介なのは、XML要素が属性と子コンテンツという2種類のデータを同時に持てるのに対し、普通のJSONオブジェクトはキーと値しか持たないという点です。これらを区別する規則がなければ、単純な変換ツールは属性を完全に失ってしまうか、子要素と混同してしまい、確実に元へ戻せなくなります。`@_name`というプレフィックス規則(JavaScriptエコシステムで広く採用されているライブラリでも使われています)は、属性に他と重ならない明確なキー形式を与えることでこの問題を解決します。そのため`<product id="42">Widget</product>`は`{"product":{"@_id":"42","#text":"Widget"}}`としてきれいに往復変換でき、idを失ったり、どちらの値が何を表すのか誤って推測したりすることがありません。
よくある質問
トップレベルキーが複数あるJSONはどうなりますか?
XMLは単一のルート要素を必要とするため、JSONオブジェクトに複数のトップレベルキーがある場合(例:{"a":1,"b":2})、出力は<root>要素で包まれます:<root><a>1</a><b>2</b></root>。トップレベルキーがちょうど1つの場合は、そのキーがそのままルート要素名になります。
XML属性はJSONでどのように表現されますか?
<user id="7">のような属性は、変換後のJSONオブジェクトでキー"@_id": "7"になります。これはfast-xml-parserなどのライブラリでも使われている、よく知られた文書化済みの規則で、属性を子要素と区別できるようにするものです。
繰り返されるXML要素はJSON配列になりますか?
はい。ある要素が同名の子要素を複数持つ場合、例えば<items><item>1</item><item>2</item></items>は、JSONに変換すると{"items":{"item":["1","2"]}}になります。このJSONをXMLに戻すと、繰り返しの<item>要素が再現されます。
XMLをJSONに変換するとき、数値や真偽値は保持されますか?
XMLには数値や真偽値というネイティブな概念がなく、すべてがテキストとして扱われます。そのためテキスト内容はJSON文字列として渡されます(例:30ではなく"30")。数値型が必要な場合は、変換後に該当フィールドを個別に変換する必要があります。
自分のデータはどこかにアップロードされますか?
いいえ。解析と変換はすべてブラウザ内のJavaScriptで、組み込みのDOMParser APIを使って行われます。サーバーには何も送信されないため、非公開の設定ファイルや社内APIのペイロードにも安心して使えます。