新しいプロジェクトを始める開発者からよく聞かれる質問がこれです:「JSONとXML、どちらを使うべき?」正直な答えは…場合によります。でもこの記事を読めば、いつどちらを選ぶべきか正確にわかるようになります。
構文を比べてみよう
違いを理解する最も簡単な方法は、同じデータを両方の形式で見ることです。シンプルなユーザーを表現してみましょう:
JSON:
XML:
JSONが約40%小さいのがわかりますか?閉じタグも山かっこの洪水もありません。1秒に数千のAPIレスポンスを送るとき、これはすぐに大きな差になります。
パフォーマンスの話
速度ではJSONが一般的に有利です。ほとんどのベンチマークで、JSONのパースはXMLのパースより2〜10倍速いことが示されています(データや使用するライブラリによります)。理由は?JSONは処理する機能が少ないため、パーサーがシンプルで高速になります。
とはいえ、XMLには非常に大きなファイル向けの切り札があります。SAXパーサーはドキュメント全体をメモリにロードせずにXMLをストリーム処理できます。2GBのXMLフィードを処理するなら、これは非常に重要です。
データ型:ここが面白いところ
JSONにはネイティブ型があります:文字列、数値、ブーリアン、null、オブジェクト、配列。{"count": 42}をパースすると実際の数値が得られます — 変換が必要な文字列ではありません。
XMLはすべてをテキストとして扱います。42の42は明示的に変換するまでただの文字列です。型を強制するにはXML Schema (XSD)の定義が必要で、これは複雑さを増します。
実際の違いを示す例です。JavaScriptでは:
JSONが正しい選択のとき
- REST API — もう議論の余地はありません。OpenAPI仕様(旧Swagger)はデフォルトでJSONを使用します。
- 設定ファイル —
package.json、tsconfig.json、.eslintrc.json。Node.jsエコシステムはJSONで動いています。 - モバイルアプリ — ペイロードが小さい = モバイル接続での読み込みが速い。ユーザーに感謝されるでしょう。
- リアルタイムアプリ — WebSocketメッセージ、Server-Sent Events、GraphQLレスポンス — すべて一般的にJSON。
XMLが良い選択のとき
- ドキュメント中心のデータ — 書籍、記事、法律文書を考えてください。XMLは混合コンテンツ(テキスト + マークアップ)を見事に処理します。
- SOAPウェブサービス — 銀行やヘルスケアのエンタープライズシステムはSOAPに大きく依存しています。
- 強力なバリデーションが必要な場合 — XML Schemaは複雑なバリデーションルールにおいてJSON Schemaより強力です。
- XSLT変換 — データをHTML、PDF、その他のフォーマットに変換する必要がありますか?XSLTはこれに対して非常に強力です。
- レガシー統合 — 多くのエンタープライズシステムはXMLを使用しており、リファクタリングが常に選択肢とは限りません。
結論
ほとんどの新しいWebプロジェクトにはJSONを選びましょう。よりシンプルで、高速で、ユニバーサルなサポートがあります。ただしXMLを軽視しないでください — ドキュメント処理、エンタープライズ統合、そして堅牢なスキーマバリデーションが必要なシナリオでは本当に優れています。多くのチームは両方を使います:APIにはJSON、ドキュメント処理にはXML。
両者の変換が必要ですか?私たちのJSON to XMLコンバーターなら数秒で完了します。
両フォーマットの簡単な歴史
XMLが先に登場し、1998年にW3Cによって標準化されました。HTMLの背後にあるマークアップ言語SGMLの簡略版として設計されました。約10年間、XMLはWebを支配しました — SOAP API、RSSフィード、XHTML、SVG、さらにはMicrosoft Officeのファイル形式(.docxはXMLで満たされたZIPファイルです)もすべてXMLに依存していました。
JSONは2001〜2002年頃に登場し、Douglas Crockfordによって推進されました。このフォーマットの公式仕様は驚くほど短く、たった1ページです。AJAX(Asynchronous JavaScript and XML — 皮肉なことに、ほとんどの場合XMLの代わりにJSONを使用することになりました)の波に乗りました。2010年代初頭までに、JSONはWeb APIの使用でXMLを追い越し、それ以来振り返っていません。
実世界の比較:製品カタログ
より複雑な例を見てみましょう。両方の形式でネストされたデータを持つ製品です:
JSON:
XML:
面白いことに気づきましたか?XMLには属性があります(タグ自体のid="PRD-001"やcurrency="USD"など)。JSONには属性の概念がありません — すべてがキーと値のペアです。XML属性はメタデータにとても便利ですが、パース時に複雑さの層を追加することにもなります。
フォーマット間の変換でよくある間違い
XMLからJSON(またはその逆)に移行する場合、以下の落とし穴に注意してください:
1. XML属性の消失。 29.99をJSONに変換する際、多くの素朴なコンバーターは{"price": "29.99"}だけを生成し、通貨属性を完全に失います。優れたコンバーターは{"price": {"_value": "29.99", "_currency": "USD"}}のような規約を使用します。
2. 配列の曖昧さ。 XMLでの子要素が1つだけの場合、それがJSON値にマッピングされるべきか、単一要素の配列にマッピングされるべきか不明確です。後で2番目のを追加すると、構造が変わります。JSONは明示的です:[item]は常に配列です。
3. 型の消失。 XMLにはネイティブ型がないため、42を変換すると{"count": 42}(数値)ではなく{"count": "42"}(文字列)になる可能性があります。スマートなコンバーターは型推論を試みますが、常に信頼できるわけではありません。
機能別比較
| Feature | JSON | XML |
| 人間の可読性 | 優秀 | 良好 |
| ファイルサイズ | 小さい(約40%少ない) | 大きい(冗長なタグ) |
| パース速度 | 高速(2-10倍) | 低速 |
| ネイティブデータ型 | あり(6種類) | なし(テキストのみ) |
| コメント | 非対応 | 対応() |
| スキーマバリデーション | JSON Schema | XSD, DTD, RelaxNG |
| 名前空間 | 非対応 | 対応 |
| 属性 | 非対応 | 対応 |
| 混合コンテンツ | 不可 | 優秀 |
| ストリーミングパーサー | 限定的 | SAX, StAX |
| 変換 | 限定的 | XSLT, XPath, XQuery |
両方を一緒に使う場合
多くの実世界のシステムは1つのフォーマットだけを使うわけではありません。一般的なハイブリッドアプローチを紹介します:
- APIゲートウェイパターン: 公開REST APIはJSONを使いますが、内部的にはサービスがレガシーのXMLベースのシステムと通信します。ゲートウェイが変換を処理します。
- データパイプライン: XMLフィード(RSS、ATOM、またはヘルスケアのHL7のような業界固有のフォーマット)を取り込み、アプリケーション層用にJSONとして変換・保存します。
- ドキュメント生成: データベースに構造化データをJSONとして保存しますが、XSLTを介してPDF、DOCXファイル、その他のドキュメント形式を生成する必要がある場合にXMLを生成します。
パースパフォーマンス:実際の数値
アプローチの違いを示す実用的なJavaScriptの例です:
JSON版はコードが短いだけでなく、JSON.parse()はすべてのブラウザエンジンでネイティブC++で実装されており、非常に高速です。XMLパースは要素、属性、テキストノード、名前空間を持つ完全なDOMツリーの構築を伴います — 内部ではるかに多くの作業が必要です。
自分で試してみよう
両方のフォーマットで作業する準備はできましたか?あなたの生活を楽にするツールはこちらです:
- JSON Formatter — JSONデータをフォーマットして美しく整えます。
- XML Formatter — 乱雑なXMLを適切なインデントできれいにします。
- JSON to XML Converter — 属性や配列をスマートに処理しながら、フォーマット間を即座に切り替えます。
どちらのフォーマットを選んでも、最も重要なのはプロジェクト内での一貫性です。ユースケースに最も適したフォーマットを選び、決定を文書化し、それを守りましょう。