alltools.one
Data
2025-06-14
8 min
alltools.one Team
CSVJSONXMLData FormatAPI

CSV vs JSON vs XML:適切なデータフォーマットの選び方

すべてのデータ交換にはフォーマットの選択が必要です。CSV、JSON、XMLは最も一般的な3つのオプションで、それぞれ異なる強みを持っています。間違ったフォーマットを選ぶとパースの問題、肥大したペイロード、開発時間の浪費につながります。このガイドは適切なツールの選択を支援します。

フォーマットの概要

CSV(カンマ区切り値)

name,age,city
Alice,30,London
Bob,25,Paris
Charlie,35,Tokyo
  • 構造:フラットな表形式(行と列)
  • 型システム:なし(すべてがテキスト)
  • ネスト:非対応
  • サイズ:表形式データで最小

JSON(JavaScript Object Notation)

[
  {"name": "Alice", "age": 30, "city": "London"},
  {"name": "Bob", "age": 25, "city": "Paris"},
  {"name": "Charlie", "age": 35, "city": "Tokyo"}
]
  • 構造:階層的(オブジェクト、配列)
  • 型システム:文字列、数値、ブール、null、オブジェクト、配列
  • ネスト:ネイティブサポート
  • サイズ:中程度

XML(eXtensible Markup Language)

<people>
  <person>
    <name>Alice</name>
    <age>30</age>
    <city>London</city>
  </person>
  <person>
    <name>Bob</name>
    <age>25</age>
    <city>Paris</city>
  </person>
</people>
  • 構造:属性と要素を持つ階層構造
  • 型システム:XML Schema(XSD)経由
  • ネスト:ネイティブサポート
  • サイズ:最大(冗長なタグ)

詳細比較

特徴CSVJSONXML
可読性高い(表形式)高い低い(冗長)
ファイルサイズ最小最大
パース速度最速速い最遅
ネスト不可可能可能
スキーマ標準なしJSON SchemaXSD、DTD
コメント不可不可可能
メタデータ不可不可可能(属性)
ストリーミング行単位SAX/ストリーミングSAX/StAX
バイナリデータ不可Base64文字列Base64またはCDATA
名前空間不可不可可能

CSVの使用場面

最適な用途

  • スプレッドシートデータとデータベースエクスポート
  • データ分析(Pandas、R、Excel)
  • 一貫した列を持つシンプルなフラットデータ
  • 最大の互換性(すべてのツールがCSVをサポート)
  • サイズが重要な大規模データセット

避けるべき場面

  • ネストされた階層構造を持つデータ
  • 複数のデータ型を保持する必要がある場合
  • 列の値にカンマ、改行、クォートが含まれる場合(エッジケース)

CSVエディターでCSVデータを操作するか、CSV to JSONコンバーターでJSONに変換できます。

JSONの使用場面

最適な用途

  • Web API通信(REST、GraphQLレスポンス)
  • 設定ファイル(package.json、tsconfig.json)
  • ドキュメント指向データベース(MongoDB、CouchDB)
  • ブラウザ環境(ネイティブJavaScriptパース)
  • 構造が可変のデータ(一部のレコードにのみフィールドがある)

避けるべき場面

  • データが純粋な表形式の場合(CSVの方がシンプルで小さい)
  • XMLの機能が必要な場合(名前空間、スキーマ、XSLT)
  • データファイルにコメントが必要な場合(代わりにYAMLを使用)

JSONフォーマッターでJSONをフォーマットおよび検証できます。

XMLの使用場面

最適な用途

  • エンタープライズシステム(SOAP、XHTML、RSS、SVG)
  • ドキュメントマークアップ(混在コンテンツ — 埋め込み構造を持つテキスト)
  • 要素と並んで属性が必要な場合
  • 強力なスキーマ検証要件(XSD)
  • XSLT変換
  • 業界固有の標準(医療のHL7、金融のXBRL)

避けるべき場面

  • モダンWeb APIの構築(JSONが標準)
  • データが表形式の場合(CSVの方がシンプル)
  • ファイルサイズとパース速度が重要な場合(JSONの方がスリム)

サイズ比較

同じ1000レコードのデータセット:

フォーマットファイルサイズパース時間(相対)
CSV45 KB1x(ベースライン)
JSON85 KB1.5x
XML140 KB3x

XMLの冗長性 — 開始タグ、終了タグ、すべての値で繰り返される要素名 — はCSVと比較してサイズを約3倍にします。

マイグレーションパターン

CSVからJSON

import csv, json

with open('data.csv') as f:
    reader = csv.DictReader(f)
    data = list(reader)

with open('data.json', 'w') as f:
    json.dump(data, f, indent=2)

JSONからCSV

import csv, json

with open('data.json') as f:
    data = json.load(f)

with open('data.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=data[0].keys())
    writer.writeheader()
    writer.writerows(data)

XMLからJSON

import xmltodict, json

with open('data.xml') as f:
    data = xmltodict.parse(f.read())

with open('data.json', 'w') as f:
    json.dump(data, f, indent=2)

モダンなランドスケープ

過去10年のトレンドは明確です:JSONはWeb APIと設定においてXMLを大きく置き換えました。しかし、分析やビジネスの文脈でのデータ交換ではCSVが依然として主流であり、XMLはエンタープライズおよび政府システムで存続しています。

新しい代替手段

  • YAML:人間に優しい設定(JSONとXMLの両方の設定を置き換える)
  • Protocol Buffers / MessagePack:高性能システム向けバイナリフォーマット
  • Parquet / Arrow:ビッグデータ分析向けカラムナーフォーマット

JSONとYAMLの比較についてはYAML vs JSONガイドをご覧ください。

FAQ

これらのフォーマット間で変換してもデータは失われませんか?

CSVからJSONへの変換はフラットデータに対してはロスレスです(ただし型は失われます — CSVでは数値が文字列になります)。JSONからCSVへの変換では階層構造が失われます(ネストされたオブジェクトはフラット化が必要)。XMLからJSONへの変換はほぼロスレスですが、属性と混在コンテンツは扱いが難しい場合があります。特定のデータで往復変換を必ずテストしてください。

新しいAPIにはどのフォーマットを使うべきですか?

JSONです。ネイティブなブラウザサポート、優れたツール、可読性とサイズの最適なバランスを持つ、モダンWeb APIのデファクトスタンダードです。検証にはJSON Schemaを使用してください。唯一の例外は、XMLを要求するレガシーエンタープライズシステムとの統合の場合です。

関連リソース

Published on 2025-06-14
CSV vs JSON vs XML: Choosing the Right Data Format | alltools.one