XMLからJSONへの変換
XMLドキュメントをJSON形式にパースする方法を学びます。要素からキーへのマッピング、テキストコンテンツの抽出、XMLからJSONへの変換でよくある課題を解説します。
Basics
詳細な説明
XMLからJSONへの変換は、SOAP API、RSSフィード、またはXMLを使用するエンタープライズサービスからデータを取得し、アプリケーション内部ではJSONを使用する場合に不可欠です。
一般的なXMLドキュメント:
<user>
<id>42</id>
<name>Alice</name>
<email>alice@example.com</email>
<verified>true</verified>
</user>
JSONに変換すると:
{
"user": {
"id": "42",
"name": "Alice",
"email": "alice@example.com",
"verified": "true"
}
}
主な変換の課題:
- すべてが文字列になる。 XML要素のテキストコンテンツには型情報がありません。
<id>42</id>は42(数値)ではなく"42"(文字列)になります。型変換にはポストプロセスが必要です。 - 属性 vs 要素。 XMLはデータを属性と子要素の両方に格納できます。一般的な規約として、JSON出力で属性名に
@プレフィックスを付けます:<user id="42">は{ "@id": "42" }になります。 - ルート要素のジレンマ。 XMLのルート要素(
<user>)はJSONでラッパーキーになります。一部のコンバーターはよりフラットな出力のためにルートを除去します。 - 単一子要素 vs 配列の曖昧さ。 親に1つの
<item>子がある場合、JSONは"item": {...}(オブジェクト)か"item": [{...}](配列)のどちらにすべきか?これがXMLからJSONへの変換で最大の設計判断です。
一般的な規約:
| 規約 | 属性 | テキストコンテンツ | 配列 |
|---|---|---|---|
| Parker | 破棄 | 直接値 | カウントベース |
| BadgerFish | @attr プレフィックス |
$ キー |
常に配列 |
| Yahoo/JsonML | 位置ベース | 配列に混合 | 位置ベース |
推奨: ほとんどのユースケースでは、要素からキーへのマッピングに @ プレフィックス付き属性と明示的な配列ヒントを組み合わせたシンプルな規約が、可読性と忠実度の最良のバランスを提供します。
ユースケース
サードパーティのSOAP APIレスポンスをモダンなReactフロントエンドで消費するために、XMLレスポンスボディをステート管理とレンダリング用のJSONに変換する場合。