JSON vs XML 比較
データ交換におけるJSONとXMLを比較します。構文の違い、冗長性、パース速度、スキーマサポート、プロジェクトに適した形式の選び方を解説します。
詳細な説明
JSONとXMLは、最も広く使用されているテキストベースのデータ交換形式です。XMLは初期のWeb時代を支配しましたが、JSONはモダンなWeb API、モバイルアプリケーション、マイクロサービスのデフォルトの選択肢となっています。両者の違いを理解することで、ユースケースに適した形式を選択できます。
構文の比較:
同じデータを両方の形式で表現:
JSON:
{"user": {"name": "Alice", "age": 30, "roles": ["admin", "editor"]}}
XML:
<user>
<name>Alice</name>
<age>30</age>
<roles>
<role>admin</role>
<role>editor</role>
</roles>
</user>
XMLはすべての要素に開始タグと終了タグが必要なため、大幅に冗長になります。JSON表現は67文字ですが、同等のXMLは約130文字と、ほぼ2倍です。
データ型:
JSONはstring、number、boolean、null、object、arrayをネイティブにサポートしています。XMLはすべてをテキストとして扱います。外部スキーマがなければ、数値 30 と文字列 "30" を区別できません。そのため、XMLパーサーには値を意図した型として解釈するための追加ロジックが必要です。
パースとパフォーマンス:
JSONはほとんどのプログラミング言語のネイティブデータ構造(辞書、リスト、プリミティブ)に直接マッピングされるため、パースが高速で簡単です。XMLのパースはより複雑で、DOMパース(ドキュメント全体をメモリに読み込む)またはSAX/StAXイベントベースのパースが必要です。JSONパーサーは同等のデータに対して通常XMLパーサーの5〜10倍高速です。
XMLが依然として優れている領域:
XMLは要素の属性、名前衝突を避けるための名前空間、混合コンテンツ(テキストと要素の混在、ドキュメントマークアップに不可欠)、成熟したスキーマ言語(XSD、RelaxNG)をサポートしています。XSLTは強力な変換言語を提供します。金融(FIX、FIXML)、医療(HL7)、出版(DocBook、DITA)などの業界には深いXMLインフラがあります。SOAPのWebサービスは衰退しつつありますが、依然としてXMLのみを使用しています。
開発者がよくやるミス:
開発者は単純なデータ交換に「より表現力があるから」とXMLを選択し、不要な複雑さを追加することがあります。逆に、ドキュメント指向のコンテンツ(インラインアノテーション付きの整形テキストなど)をJSONで表現しようとすると、JSONには混合コンテンツのサポートがないため不自然になります。もうひとつのミスは、適切なXMLパーサーを使用せず、文字列マッチングや正規表現でXMLを手動パースすることで、CDATAセクション、名前空間、エンティティ参照などのエッジケースで失敗します。
ベストプラクティス:
Web API、設定、アプリケーション間のデータ交換にはJSONを選択してください。混合コンテンツ、名前空間サポートが必要な場合、または既存のXMLエコシステムと統合する必要がある場合はXMLを選択してください。形式間の不必要な変換は避けてください。特にXMLの属性や名前空間プレフィックスには直接的なJSON対応がないため、変換時に情報が失われる可能性があります。
ユースケース
新しいREST APIにXMLではなくJSONを選択する。ペイロードが小さく、パースが高速で、フロントエンドのJavaScriptフレームワークとの親和性が高いため。