
XMLからJSONへの変換:開発者のための実践ガイド
📷 Pixabay / PexelsXMLからJSONへの変換:開発者のための実践ガイド
XMLは時代遅れに感じるかもしれませんが、API、設定ファイル、データフィードなどで日々出会います。正気を保ちながら変換する方法を解説します。
数年ごとに開発者コミュニティはXMLの終焉を宣言して盛り上がります。そして最初のエンタープライズ統合契約を受け取るか、RSSフィードを取得するか、Androidのレイアウトファイルを見るか、小説ほどの大きさのSOAP APIレスポンスを渡されるか——すると、そこにXMLがあります。依然として健在です。
このガイドはXMLが良いか悪いかについてではありません。XMLデータがあってJSONが必要な場合——モダンAPIに流し込むため、JavaScriptでパースするため、あるいは単に読みやすくするため——という実際の問題に対処するものです。さっそく始めましょう。
2026年でもまだXMLに出会う理由
XMLは1990年代後半から2000年代の支配的なデータ交換フォーマットでした。2010年代にはJSONがWebAPIでXMLをほぼ置き換えましたが、XMLが消えることはありませんでした——すでに根付いた場所に残り続けたのです。
定期的にXMLに出会う場所:
RSSとAtomフィード。 すべての主要ニュースサイト、ポッドキャストプラットフォーム、ブログはRSSフィードをXMLで配信しています。コンテンツアグリゲーター、ニュースリーダー、ポッドキャストアプリを作っていれば、XMLを扱うことになります。
SOAPウェブサービス。 多くのエンタープライズと政府システムはXMLベースのSOAP APIを使用しています。銀行統合、保険システム、ヘルスケアAPI、運送会社——SOAPはB2Bソフトウェアで広く普及しています。
MavenとGradle(Java/Kotlinビルドツール)。 pom.xmlファイル。JVMプロジェクトに携わる場合、XMLに触れることになります。AndroidのAndroidManifest.xmlとレイアウトファイルもXMLです。
Microsoftのオフィス形式。 DOCX、XLSX、PXTXは中にXMLを含むZIPアーカイブです。プログラムによるドキュメント生成やパースは、裏でXMLを扱うことを意味します。
SVG。 スケーラブルベクターグラフィックスはXMLです。ベクター画像をプログラムで扱う場合、XMLの領域に踏み込みます。
Salesforce。 SalesforceのSOQLとBulk API v1はどちらもXMLを出力します。
パターンは明確です:モダンなWeb開発はJSONに大きく傾いていますが、エンタープライズ統合、データフィード、古いエコシステムに近づいた瞬間、XMLが登場します。
XMLが扱いづらい理由
JSONに慣れていると、XMLは非常に煩わしく感じます。その理由:
冗長性。 比較してみましょう:
{"user": {"id": 1, "name": "Alice", "active": true}}
対:
<user>
<id>1</id>
<name>Alice</name>
<active>true</active>
</user>
同じデータを伝えています。XMLの方が長く、ひと目で読みにくく、手書きでエラーが出やすいです。
属性と要素の曖昧さ。 XMLではデータを属性(<user id="1">)または子要素(<id>1</id>)として表現できます。どちらも有効で、異なるXMLスキーマが異なる選択をします。この不一致により、スキーマを読まないと構造を予測できません。
名前空間。 XMLの名前空間により、異なる語彙からの要素名が衝突なく共存できます。複雑なドキュメントには強力で必要ですが、単純な値を抽出しようとするときには厄介です。
混在コンテンツ。 XMLは子要素と混在したテキストをサポートします:
<p>これは<em>重要な</em>テキストです。</p>
これはJSONにきれいにマッピングできません。
これらすべての理由から、JavaScriptやPythonでXMLを扱うには文字列パースではなく適切なXMLライブラリが必要です。そして構造が許す場合、JSONに変換することでデータが格段に扱いやすくなります。
JSONのデータモデル
JSONはシンプルで厳格な型モデルを持っています:
- 文字列 —
"hello" - 数値 —
42,3.14 - ブーリアン —
true,false - Null —
null - 配列 —
[1, 2, 3] - オブジェクト —
{"key": "value"}
JSONのすべてはこれら6つの型のいずれかです。属性、名前空間、混在コンテンツ、処理命令、CDATAの概念はありません。このシンプルさがJSONがAPI設計で勝った理由です——データを表現する方法は一つだけです。
XMLからJSONへのツールの使い方
XMLからJSONへのコンバーターは、ブラウザで直接変換を処理します——サーバーへのデータ送信なし、インストール不要です。
基本的な使い方:
- 左パネルにXMLを貼り付ける
- 変換をクリック(または自動変換される)
- 右側にJSON出力が表示される
- JSONをコピーして必要な場所で使用する
シンプルなXMLドキュメントの場合:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>Alice</name>
<age>30</age>
<email>alice@example.com</email>
</person>
クリーンなJSONが得られます:
{
"person": {
"name": "Alice",
"age": "30",
"email": "alice@example.com"
}
}
ageがJSON出力では文字列(30ではなく"30")になっていることに注意してください。XMLには数値型がありません——すべてテキストです。
属性プレフィックスの慣習
XML要素に属性がある場合、JSON出力では@プレフィックスが付いて表示されます:
<book id="123" lang="en">
<title>Clean Code</title>
<author>Robert Martin</author>
</book>
変換後:
{
"book": {
"@id": "123",
"@lang": "en",
"title": "Clean Code",
"author": "Robert Martin"
}
}
@プレフィックスは広く使われる慣習です(Badgerfishの慣習に由来し、複数の人気のあるXML-JSON変換ライブラリで使用されています)。JSON構造内で属性と子要素を区別します。コードでこのJSONを消費する場合、属性値にはdata.book["@id"]でアクセスします。
繰り返し要素は配列になる
最も重要な(そして驚かされる可能性がある)変換の動作:同じタグが同じレベルに複数回現れると、JSON配列になります。
<library>
<book>
<title>Clean Code</title>
</book>
<book>
<title>The Pragmatic Programmer</title>
</book>
<book>
<title>Refactoring</title>
</book>
</library>
変換後:
{
"library": {
"book": [
{"title": "Clean Code"},
{"title": "The Pragmatic Programmer"},
{"title": "Refactoring"}
]
}
}
これは正しく便利です。しかし不一致を生み出します:もし図書館に本が1冊しかなければ、bookは配列ではなくオブジェクトになります。これはJSON構造が常に一貫していると想定するコードを多くつまずかせます。
この変換されたJSONを消費するコードを書く場合、フィールドがオブジェクトか配列か両方の可能性を常に処理してください。JavaScriptでは、インデックス位置にアクセスする前にArray.isArray(data.library.book)を確認します。
変換が完全でない場合
いくつかのXML機能はJSONにクリーンに変換されません。
名前空間。 名前空間の宣言(xmlns="...")はコンバーターによって保持される場合とされない場合があります。
CDATAセクション。 ほとんどのコンバーターはCDATAブロックからテキストコンテンツを抽出します。CDATAコンテンツに意図的なマークアップや特殊文字が含まれていた場合は、出力を慎重に確認してください。
XMLコメント。 <!-- comment -->ノードは通常削除されます。
混在コンテンツ。 最難関のケース。コンバーターは通常、子要素の値のみを保持し、周囲のテキストを失います。
単純なデータ交換——API、設定、データフィード——では、これらのエッジケースはほとんど問題になりません。ドキュメント中心のXML(コンテンツ管理、技術文書)では注意が必要です。
実際のユースケース
SOAP APIレスポンスの消費
SOAP APIレスポンスの変換で、完全なSOAPライブラリなしにJavaScriptで扱えるJSON構造が得られます。名前空間プレフィックス(soap:)はキー名の一部として表示されます。クイックなデータ抽出には多くの場合十分です。
RSSフィードのパース
RSSフィードは予測可能な構造のXMLドキュメントです。JSONに変換することで、モダンなJavaScriptでの作業がはるかに簡単になります。変換後は、data.rss.channel.itemが直接反復処理できる投稿の配列になります。
AndroidリソースファイルのXML変換
AndroidのXMLリソースファイルをJSONに変換することで、完全なAndroid SDKなしにビルドスクリプトやツールでこれらのファイルを処理しやすくなります。
プログラムによる変換
コードで繰り返しXMLをJSONに変換する必要がある場合、クイックブラウザーツールは答えではありません。オプション:
JavaScript/Node.js: fast-xml-parserは最も広く使われるライブラリで、高速で設定可能です。xml2jsは古いですが依然人気があります。
const { XMLParser } = require('fast-xml-parser');
const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: '@' });
const result = parser.parse(xmlString);
Python: xmltodictはXMLをPython辞書に変換します(JSONにきれいにマッピングされます)。
import xmltodict, json
result = xmltodict.parse(xml_string)
json_output = json.dumps(result, indent=2)
Go: encoding/xmlは標準ライブラリにありますが、APIはクリーンなパースに構造体定義が必要です。github.com/clbanning/mxjはxmltodictに似た動的変換を提供します。
ワンオフ変換やデバッグには、XMLからJSONへのツールはこれらのコードを書くよりも速いです。本番パイプラインには、言語に合ったライブラリを選択して一度設定してください。
XMLはなくなりません——XMLベースのシステムのインストールベースは巨大で、エンタープライズは動作するインフラを予定通りに書き直しません。実用的なスキルは、XMLが現れたときに毎回格闘するのではなく、効率的に作業する方法を知ることです。
構造化データを扱うための関連ツール:
- XMLフォーマッター — XMLのフォーマット、検証、整形
- JSONフォーマッター — 変換後のJSON出力のクリーンアップ
- JSON Diff — 2つのJSON構造を比較して変更を確認