XML⇔JSON変換ガイド:設定ファイルとAPIデータ形式の変換
XMLとJSONの核心的な違い
| 特徴 | XML | JSON |
|---|---|---|
| データ形式 | タグマークアップ | キー・バリュー |
| 属性 | あり(<node attr="val">) |
なし(属性はフィールドに変換) |
| 名前空間 | あり(xmlns) |
なし |
| コメント | あり(<!-- -->) |
なし |
| 配列表現 | 暗黙(同名要素の繰り返し) | 明示([]) |
| テキストノード | 混合内容(タグ+テキスト) | 純粋な文字列値 |
XMLはドキュメント型データ(SVG、HTML、設定)に適し、JSONは構造化データ(APIレスポンス)に適しています。
XML属性のJSONへのマッピング
XML要素は属性とテキスト内容を同時に持てめり、これが変換の難点です:
単純な要素
<person name="太郎" age="30"/>
{
"person": {
"@name": "太郎",
"@age": "30"
}
}
慣例として
@プレフィックスでXML属性を表します。これが最も一般的な変換ルールです。
混合内容(属性+テキスト)
<price currency="JPY">980</price>
{
"price": {
"@currency": "JPY",
"#text": "980"
}
}
#textで要素のテキスト内容を表し、属性と区別します。
配列検出:最もよくある落とし穴
XMLでは配列は暗黙的です——同名要素が繰り返し現れると配列になります:
<books>
<book>三体</book>
<book>活きる</book>
</books>
{
"books": {
"book": ["三体", "活きる"]
}
}
問題:要素が1つだけの場合、XMLでは配列かどうか区別できません:
<books>
<book>三体</book>
</books>
次のように変換される可能性があります:
{
"books": {
"book": "三体"
}
}
解決策:XML⇔JSONツール で「配列を強制」オプションにチェックを入れ、常に配列として扱う要素名を指定します。
名前空間の処理
XML名前空間はJSONに直接対応するものがありません:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<m:GetPrice xmlns:m="http://example.com">
<m:Item>123</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
一般的な処理戦略:
| 戦略 | 説明 | 用途 |
|---|---|---|
| プレフィックスを保持 | soap:Body → "soap:Body" |
SOAP/WSDL処理 |
| プレフィックスを削除 | soap:Body → "Body" |
単純なケース、衝突なし |
| 名前空間キーを使用 | {soap}Body |
異なる名前空間の同名要素を区別する必要がある場合 |
XMLフォーマッター でXMLを整形してから変換することをお勧めします。
XML⇔JSONツールの使い方
ステップ1:ツールを開く
XML⇔JSONツール にアクセスし、変換方向を選択します。
ステップ2:ソースデータを入力
- XML → JSON:XML文字列を貼り付け
- JSON → XML:JSON文字列を貼り付け
JSONフォーマッター または XMLフォーマッター で事前に整形できます。
ステップ3:変換オプションを設定
| オプション | 説明 |
|---|---|
| 属性プレフィックス | 属性を @attr または $attr にマッピング |
| テキストノードキー | テキスト内容を #text または _text にマッピング |
| 配列を強制 | 常に配列として扱う要素名を指定 |
| 名前空間 | 保持/削除/変換 |
ステップ4:変換を実行
「変換」をクリックし、結果を確認してコピーします。
実践シナリオ
設定ファイルの移行
多くのレガシープロジェクトはXML設定(Spring、Maven)を使用し、新しいプロジェクトはYAML/JSONを好みます:
pom.xml → package.json(依存情報)
spring-config.xml → application.json(Bean設定)
SOAP APIからRESTへ
SOAPレスポンスはXMLなので、フロントエンド用にJSONに変換する必要があります:
SOAP XMLレスポンス → JSON → フロントエンドレンダリング
SVGメタデータの抽出
SVGはXML形式です。メタデータを抽出してJSONに変換するとプログラムで扱いやすくなります:
<svg width="100" height="100"> → {"svg": {"@width": "100", "@height": "100"}}
JSONからXMLへの変換の注意点
JSONからXMLに変換する際の注意:
| 注意点 | 説明 |
|---|---|
| ルート要素 | JSONには単一のルートキーが必要 |
| キー名の妥当性 | XMLタグ名は数字で始めることができず、スペースを含められない |
| 配列のラッピング | JSON配列にはラッパー要素名が必要 |
| 特殊文字 | <、>、& はエンティティとしてエスケープが必要 |
よくある問題
| 問題 | 原因 | 解決策 |
|---|---|---|
| 単一要素が配列にならない | XMLで単一要素と配列を区別できない | 「配列を強制」にチェック |
| 属性が消失 | 変換ルールに属性プレフィックスが未設定 | 属性プレフィックス設定を確認 |
| 名前空間の衝突 | 異なる名前空間に同名要素がある | 名前空間プレフィックスを保持 |
| JSON→XMLでエラー | キー名が不正 | キー名をXML仕様に準拠するよう変更 |
| 混合内容が消失 | テキストノードキーが正しくマッピングされていない | #text 設定を確認 |
まとめ
XML⇔JSON変換はデータ形式の移行やAPI統合でよくあるニーズです。属性マッピング、配列検出、名前空間の3つのコア問題を理解することが、正確な変換の鍵です。XML⇔JSONツール は柔軟な変換オプションを提供し、JSONフォーマッター と XMLフォーマッター で完全な形式変換ワークフローを構築できます。