データフォーマット
JSON配列 vs CSV vs ラインリスト:どのフォーマットを選ぶべきか?
JSON配列、CSV、ラインリストを比較。エスケープ、ネストされたデータ、スプレッドシートの使用、変換の落とし穴について学び、データプロジェクトに最適なフォーマットを選びましょう。
スプレッドシート、API、開発ツールでデータのリストを扱う場合、単純なテキスト形式から選択することがよくあります。JSON配列、CSVファイル、ラインリスト(1行に1項目)は最も一般的なものです。各形式には、エスケープ、ネスト構造、手動編集の処理に影響する長所と制限があります。
JSON配列は機械に適しており、リッチなデータ型をサポートします。CSVはスプレッドシートのインポートとエクスポートのための普遍的な形式です。ラインリストは手動編集とバージョン管理に最もシンプルです。正しい選択は、構造を保持する必要があるか、非技術ユーザーと共有するか、ファイルサイズを最小化するかによって異なります。
このガイドでは、エスケープ、ネストされたデータ、スプレッドシート統合、変換の落とし穴について3つの形式を比較します。各形式を効果的に使用し、データを移動する際の一般的な間違いを避ける方法を学びます。
3つのフォーマットを理解する
JSON配列は、角括弧で囲まれた値の順序付きコレクションです。文字列、数値、ブーリアン、オブジェクト、ネストされた配列を含めることができます。CSV(カンマ区切り値)は、テーブルデータを行として表し、フィールドをカンマで区切ります。オプションのヘッダー行があることがよくあります。ラインリストは最もシンプルな形式です。1行に1つの値で、デリミタもカラム構造もありません。
- JSON配列は異種データとネストされたオブジェクトを処理します。
- CSVはスプレッドシートとデータベースエクスポートの標準です。
- ラインリストは、メールアドレスやファイル名のような単純な順序付きコレクションに最適です。
["apple", "banana", "cherry"]fruit,quantity
apple,3
banana,5
cherry,2apple
banana
cherryJSON配列を扱う
JSON配列は、ネストされた構造をサポートするため、Web APIや設定ファイルで広く使用されています。配列は複数のプロパティを持つオブジェクトを保持でき、実世界のエンティティを簡単に表現できます。この形式は厳格です。末尾のカンマ、引用符で囲まれていないキー、または括弧の不一致は解析エラーを引き起こします。
単純なリストの場合、JSONはラインリストよりも冗長ですが、機械可読性と多様なデータ型のサポートがそのオーバーヘッドを上回ることがよくあります。エスケープは文字列内でバックスラッシュを使用して処理されます。二重引用符は\"、バックスラッシュは\\、改行は\nになります。
- 長所:複雑なネストをサポート、言語非依存、自己記述的。
- 短所:より冗長、バリデーションが必要、大規模データセットでは人間による編集が難しい。
[
{"name": "Alice", "email": "[email protected]"},
{"name": "Bob", "email": "[email protected]"}
]["line1\nline2", "path\\to\\file", "She said \"hello\""]CSVを扱う
CSVファイルは、スプレッドシートとデータベース間でデータを交換するための事実上の標準です。各行はレコードを表し、フィールドはデリミタ(通常はカンマ、ただしカンマが小数区切りである地域ではセミコロンが使用される)で区切られます。RFC 4180に従い、デリミタ、二重引用符、改行を含むフィールドは二重引用符で囲む必要があります。
CSVのデータは常に文字列として表現されます。数値、日付、ブーリアンはプログラムによって異なる解釈をされる場合があります。ヘッダーは一般的ですが必須ではありません。CSVの最大の課題は、ロケール固有のデリミタとエンコーディング(UTF-8、UTF-8 BOM、ISO-8859-1)の処理です。
- 長所:スプレッドシートにネイティブ、テーブル形式で簡単に表示、コンパクト。
- 短所:データ型が限られる(すべて文字列)、ネスト構造がない、引用符エスケープが紛らわしい。
"Name","Comment"
"Smith, John","He said ""hello"""ラインリストを扱う
ラインリストは最もシンプルなテキストベースのデータ形式です。1行に1つの値で、デリミタも引用規則もありません。メールアドレス、ドメイン名、ファイル名、製品コードなど、各項目が改行を含まない単一の文字列であるアイテムのコレクションに最適です。この形式は非常に人間に優しく、grep、sort、uniqなどのコマンドラインツールとうまく連携します。
エスケープがないため、ラインリストは複数行の値を含めることができません。アイテムに改行が含まれる可能性がある場合は、別の形式を使用するか、慣例として改行をリテラルのバックスラッシュn(または他のプレースホルダー)としてエンコードする必要があります。多くのエディタやバージョン管理システムは、変更が行ごとに可視化されるため、ラインリストをきれいに処理します。
- 長所:人間が読みやすい、ソートや重複除去が簡単、通常の値にはエスケープ不要。
- 短所:単一フィールドデータのみに適しており、慣例なしでは複数行アイテムをサポートしない。
[email protected]
[email protected]
[email protected]3つのフォーマットにおけるエスケープと引用
各形式は特殊文字の処理方法が異なります。JSONでは、任意の文字列にバックスラッシュエスケープシーケンスを含めることができます。\"で二重引用符、\\でバックスラッシュ、\nで改行、\tでタブを表します。パーサーは常にこれらのシーケンスを解釈するため、JSONは曖昧さがありませんが、手書きは難しくなります。
CSVは、特殊文字を含むフィールドを保護するために外側の二重引用符に依存します。フィールドに二重引用符が含まれる場合は、二重引用符を2つ重ねて("")1つのリテラル引用符を表します。ラインリストにはエスケープ機構がなく、データに改行が含まれると構造が壊れます。これらの違いを理解することは、フォーマット間の変換時に重要です。
- JSONは文字列内でバックスラッシュエスケープを使用します。
- CSVはカンマ、改行、引用符を含むフィールドに対して二重引用符を使用します。
- ラインリストはデータに改行がないことを前提とし、埋め込み改行は表現できません。
JSON: "He said \"hello\"\nand left."
CSV: "He said ""hello""
and left."スプレッドシート統合とインポート/エクスポート
CSVはスプレッドシートユーザーにとって最もわかりやすい形式です。ほとんどのスプレッドシートアプリケーション(Microsoft Excel、Google Sheets、LibreOffice Calc)はCSVファイルを直接開くことができますが、デリミタやエンコーディングを誤って解釈する可能性があります。一貫した結果を得るには、CSVファイルをUTF-8でバイト順マーク(BOM)付きで保存し、カンマ(または地域に応じてセミコロン)を使用します。
JSON配列は、Power Query(Excel)のような組み込みツールや簡単なスクリプトを作成してスプレッドシートにインポートできます。ラインリストはしばしば1つの列に貼り付けられます。リストにデリミタが含まれている場合は、[区切り位置]機能を使用する必要があるかもしれません。各形式について、自動データ変換に注意してください。先頭のゼロを含む数値、日付文字列、精度が失われる可能性のある大きな数値などに注意が必要です。
- Excelを開き、[ファイル] > [開く]を選択します。
- CSVファイルを選択します。データが正しく表示されない場合は、テキストインポートウィザードを使用してデリミタとエンコーディングを指定します。
- JSONの場合は、[データ] > [データの取得] > [ファイルから] > [JSONから]を使用します。
- ラインリストの場合は、データを列に貼り付け、列を選択して[データ] > [区切り位置]を使用してさらに分割する必要がある場合に使用します。
- CSV:デリミタと文字エンコーディングを確認します。UTF-8 with BOMは一部のExcelバージョンとの互換性を向上させることができます。
- JSON:インポート前に構造を検証して、構文エラーを早期に発見します。
- ラインリスト:先頭のゼロを保持する必要がある場合は、テキスト形式の列に貼り付けます。
よくある変換の落とし穴とその回避方法
これらの形式間の変換は、注意しないとデータ損失を引き起こすことがよくあります。ネストされたJSON配列をCSVにフラット化する場合、保持するプロパティを選択する必要があり、他のプロパティは破棄されます。ラインリストをCSVに変換する場合、各行は単一のフィールドになりますが、行にカンマや二重引用符が含まれている場合は、単一列を維持するために適切に引用符で囲む必要があります。
バリデーションが重要です。JSONファイルは、末尾のカンマや引用符で囲まれていないキーを検出するためにリンターで検証する必要があります。CSVファイルは、一貫した行長と正しい引用符をチェックする必要があります。ラインリストは、末尾の改行や空白行(意図的でない限り)がないことを確認する必要があります。専用の変換ツールを使用すると、これらの落とし穴を回避するのに役立ちます。
- 1. ソース形式の構造(フラットまたはネスト)を特定します。
- 2. JSONから変換する場合、ネストされたオブジェクトや配列をフラット化します。
- 3. CSVの場合、必要に応じてヘッダーが存在し、フィールドが正しく引用符で囲まれていることを確認します。
- 4. ラインリストの場合、項目に改行が含まれていないことを確認します。含まれている場合は、エンコードするか形式を変更します。
- 5. 単純な解析テストで出力を検証します。
- JSONをCSVに変換する前に、ネストされたオブジェクトをフラット化します。
- CSVのフィールドは、カンマや改行が含まれる可能性がある場合は必ず引用符で囲みます。
- 変換前にJSONをリンターで検証します。
- ラインリストの空行や末尾のスペースを確認します。
Source JSON: [{"name": "Alice", "tags": ["dev", "admin"]}]
Flattened CSV: name,tags
Alice,"[""dev"",""admin""]""Name"
"Smith, John"フォーマットの選択:決定ガイド
データに最適な形式は、データがどのように作成、消費、保守されるかによって異なります。JSON配列は、データにネストされた構造がある場合、またはすでにJSONを使用しているアプリケーション間でデータを交換する場合に使用します。CSVは、ターゲットオーディエンスがスプレッドシートを使用する場合、または普遍的に受け入れられているテーブル形式が必要な場合に選択します。ラインリストは、人間が基本的なテキストエディタで編集する単純なフラットコレクションに選びます。
- APIデータ → JSON。
- スプレッドシートインポート → CSV。
- プレーンリスト(メール、コード) → ラインリスト。
- 最大限の相互運用性 → CSV(すべてのスプレッドシートアプリがサポート)。
- バージョン管理に適した差分 → ラインリスト。
まとめ
構造化されたネストされたアプリケーションデータにはJSONを、真の行と列にはCSVを、値に改行を含まない単純なフラットコレクションにはラインリストを選びましょう。可視のデリミタと同じくらい、エスケープとインポートの動作が重要です。
ブラウザのリスト変換ツールは、プリミティブなJSON配列とリテラルなデリミタ変更に役立ちます。引用符付きや複数行のCSVには適切なCSVパーサーを使用し、ソースを破棄する前に宛先形式を検証してください。