JSON vs CSV 比較

データの保存と交換におけるJSONとCSVを比較します。構造、ネストのサポート、ファイルサイズ、ツール対応、データに適した形式の選び方を解説します。

Concept

詳細な説明

JSONとCSV(カンマ区切り値)はどちらも広く使用されるデータ交換形式ですが、根本的に異なるデータ形状向けに設計されています。CSVはフラットな表形式データに優れ、JSONは階層的でネストされた構造を扱えます。どちらを選ぶかは、データの性質と利用方法に依存します。

構造の違い:

CSVはスプレッドシートのように行と列でデータを表現します。すべての行は同じ数のフィールドを持ち、最初の行は通常列ヘッダーを含みます:

name,age,city
Alice,30,New York
Bob,25,London

JSONは同じデータをobjectのarrayとして表現します:

[
  {"name": "Alice", "age": 30, "city": "New York"},
  {"name": "Bob", "age": 25, "city": "London"}
]

CSVが優れている領域:

表形式データでは、CSVファイルはJSONよりも小さくなります。波括弧、角括弧、繰り返されるキー名などの構造的オーバーヘッドがないためです。10,000行5列のCSVファイルは列名を10,000回繰り返しません。CSVはスプレッドシートアプリケーション(Excel、Google Sheets)、データベースインポートツール、データ分析ライブラリ(Pythonのpandas、Rのreadr)で普遍的にサポートされています。シンプルな表形式データセットでは、CSVの方が生成、パース、行単位のストリーミングが容易です。

JSONが優れている領域:

JSONはネストされた構造、混合型、可変スキーマをサポートします。JSONオブジェクトは、あるフィールドがstringの場合もarrayの場合もあり、フィールドを完全に省略することもできます。CSVはCSVセル内にJSON文字列を埋め込んだり、address.streetaddress.city のような命名規約で追加列を作成するなどの不自然な方法に頼らなければ、ネストされたobjectやarrayを表現できません。JSONはデータ型も保持します。numberとbooleanはstringとは異なります。一方、CSVはすべてをテキストとして扱います。

ファイルサイズの比較:

多くの行を持つフラットで均一なデータの場合、JSONがすべてのレコードでキーを繰り返すため、CSVは通常同等のJSONより50〜70%小さくなります。ただし、深くネストされた不規則な構造のデータでは、多くのオプションフィールドに対して多くの空列が必要になるフラット化されたCSVよりもJSONの方がコンパクトになる場合があります。

開発者がよくやるミス:

開発者は深くネストされた列命名規約を作成して階層データをCSVに無理やり押し込み、数百の大部分が空の列を持つスパースで読みにくいファイルを生成してしまうことがあります。逆に、スプレッドシートでのみ使用される大きなフラットデータセットにJSONを使用すると、不要な複雑さが追加されます。もうひとつのミスは、CSV値内のカンマ、クォート、改行を適切に処理しないことです。これらのエッジケースにはRFC 4180のルールに従った適切なエスケープが必要です。

ベストプラクティス:

スプレッドシート、データベース、データ分析ツール向けのフラットな表形式データにはCSVを使用してください。APIレスポンス、設定、ネスト構造や可変スキーマを持つデータにはJSONを使用してください。形式間の変換が必要な場合は、特にクォートやエスケープに関するエッジケースが多いCSVでは、カスタムパーサーではなく確立されたライブラリを使用してください。

ユースケース

ビジネスチームのExcelレポート用にユーザー分析データをCSVでエクスポートし、アプリケーションの内部APIとダッシュボードでは同じデータにJSONを使用する。

試してみる — JSON Formatter

フルツールを開く