古い企業向けAPIとの連携やRSSフィードの処理をしたことがあれば、XMLに出会ったことがあるはずです。 モダンなWebで何かを構築したことがあれば、JSONの世界で生きているはずです。どちらのフォーマットも同じ根本的な問題—— 構造化データをテキストとして表現すること——を解決しますが、そのアプローチは大きく異なります。この記事では 実際の違いを詳しく解説し、informed な選択ができるようにします。
同じデータ、2つのフォーマット
具体的な例から始めましょう。JSONで表現したユーザーオブジェクトはこちらです:
{
"user": {
"id": 101,
"name": "Bob",
"email": "[email protected]",
"roles": ["admin", "editor"],
"active": true
}
}そして全く同じデータをXMLで表すとこうなります:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>101</id>
<name>Bob</name>
<email>[email protected]</email>
<roles>
<role>admin</role>
<role>editor</role>
</roles>
<active>true</active>
</user>JSONバージョンは62文字。XMLバージョンは198文字—— 同じデータで3倍の大きさです。小さなペイロードではさほど問題になりませんが、1日に何百万ものリクエストをさばく 高トラフィックのAPIでは、帯域幅はどんどん積み重なっていきます。
JSONが勝る点
- 簡潔さ。 閉じタグが不要。繰り返しが少ない。ネットワーク上のペイロードが小さい。
- JavaScriptのネイティブサポート。
JSON.parse()とJSON.stringify()はすべてのJSランタイムに組み込まれています。外部ライブラリは不要です。 - シンプルさ。 6つのデータ型とわずかなルール。JSON仕様全体を10分で読めます。
- 配列のサポート。 JSONにはネイティブの配列があります。XMLでは
<role><role><role>のように要素を繰り返すしかありません。 - ツールサポート。 PostgreSQL、MongoDB、MySQLなどのモダンなデータベースはすべてJSONを第一級サポートしています。多くのロギングプラットフォームもJSONをネイティブにパースします。
- 可読性。 開発者はJSONの方がスキャンしやすいと感じます。アングルブラケットや閉じタグによるノイズが少ないからです。
XMLがまだ勝る点
- 属性とメタデータ。 XML要素は属性を持てます:
<user id="101" active="true">。子要素を追加せずにデータにアノテーションを付けたい場合に便利です。 - 名前空間。 XML名前空間により、1つのドキュメント内で複数の語彙を混在させることができます——XHTML、SVG、SOAP、Office Open XMLなどのフォーマットにとって重要です。
- スキーマ検証。 XML Schema (XSD)は、データ型、パターン、カーディナリティを含む強力で標準化された検証を提供します。JSON Schemaも追いついてきていますが、XML Schemaには何十年ものツールサポートがあります。
- ドキュメント中心のユースケース。 XMLはデータだけでなくドキュメントのために設計されました。XHTML、DocBook、DITAのようなフォーマットはXMLの上に構築されており、テキストとマークアップが混在するコンテンツに最適です。
- XSLTによる変換。 XSLTを使えばXMLをHTML、別のXML、またはプレーンテキストに変換できます——パブリッシングパイプラインで強力なツールです。
- コメント。 XMLはコメントをサポートします。JSONはしません。ある設定が存在する理由を説明したい設定ファイルでは、これは重要です。
パフォーマンス:本当に重要なのか?
ほとんどのアプリケーションでは、JSONとXMLのパース性能の差は無関係です。 差が生まれる場面——高頻度データフィード、IoTテレメトリ、リアルタイムシステム——ではJSONが 余裕で勝ちます。JSONパーサーはフォーマット自体がシンプルなため、より単純で高速です。 簡単なベンチマーク:Node.jsで1MBのJSONファイルをパースするのに通常10〜30msかかります。等価なXMLは SAXパーサーで2〜5倍遅く、DOMパーサーならさらに遅くなります。
パフォーマンスが本当に重要な場合、どちらのフォーマットも理想的ではありません—— Protocol Buffersや MessagePackのようなバイナリフォーマットを選ぶでしょう。 ただし、一般的なWeb APIの作業には、JSONのパフォーマンスは十分すぎるほどです。
決断ガイド:どちらをいつ使うか
JSONを使う場面:
- REST APIやGraphQL APIを構築するとき
- 設定やセッティングを保存するとき(package.json、tsconfig.jsonなど)
- JavaScript、TypeScript、Python、Ruby、Go——あらゆるモダンな言語で作業するとき
- モダンなサードパーティAPIと通信するとき
- MongoDB、Elasticsearch、またはPostgreSQL JSONBカラムにドキュメントを保存するとき
XMLを使う場面:
- レガシーな企業システムと連携するとき(SAP、Salesforce SOAP APIなど)
- ドキュメント形式を扱うとき:SVG、EPUB、Office Open XML(.docx、.xlsx)
- XSLT変換を使うパブリッシングパイプライン
- RSSやAtomフィード
- 確立されたXML標準がある業界でデータ交換するとき(医療のHL7、金融のFpMLなど)
両フォーマット間での作業
2つの間で変換が必要になることもあるでしょう。レガシーXML APIを使いながらデータをJSONとして保存したい場合や、 JSONネイティブのバックエンドからXMLベースのサービスにデータを送る必要がある場合などです。 これらの変換には XML to JSON コンバーターまたは JSON to XML コンバーターが利用できます。 XMLレスポンスの確認には、XMLフォーマッターと XMLバリデーターが便利です。
まとめ
JSONとXMLは同じ問題を解決しますが、それぞれ異なるコンテキストに対応しています。JSONはモダンな開発の 大多数において正しい選択です——よりシンプルで、より小さく、すべての言語でより良いネイティブサポートを持っています。 XMLはドキュメント中心や名前空間を意識したユースケースで真にユニークな強みを持っています。 良いニュースは、教条的になる必要はないということ——両フォーマットとも成熟しており、十分にサポートされていて、 長い間共存し続けるでしょう。トレードオフを理解し、仕事に適したツールを選んでください。