CSVからJSONへの変換:フラットな表を構造化データに変える
CSVファイルをJSON形式に変換するこのツールは、行と列で構成される表形式データを、配列とオブジェクトからなる構造化データに変換します。変換の本質は、各行をひとつのJSONオブジェクト、各列をそのオブジェクトのキー(プロパティ)にマッピングすることです。このページが他の形式変換と異なる点は、CSVが持ついくつかの本質的な制約と、JSONへの変換に伴う独特の取り扱いにあります。
CSVとJSONの構造的な違い:型の不在とネッティングの不可能性
CSV(Comma-Separated Values)はすべての値をテキストとして保持します。数値、日付、ブール値といったデータ型の情報は持ちません。そのため、このツールで生成されるJSONでは、すべての値が文字列として出力されます。例えば、CSVに「12345」と書かれていても、それは数値の一万二千三百四十五ではなく、文字列の「12345」としてJSONに書き出されます。同様に、郵便番号の「012-3456」は先頭のゼロを保持したまま文字列として残ります。これにより、JSONを後続の処理で読み込む際に自動型変換が行われない限り、データの整合性が保たれます。
さらに、CSVはフラットなテーブルです。行と列の二次元構造しか表現できません。そのため、変換後のJSONもフラットなオブジェクトの配列にしかなりません。オブジェクトの中に別のオブジェクトや配列を入れ子にするような階層構造は、CSVからは自動的には生成されません。もし階層的なJSONが必要な場合は、変換後に手動で加工する必要があります。
区切り文字の選択:カンマ、セミコロン、タブのどれを使うか
CSVという名前は「カンマ区切り」を意味しますが、実際にはさまざまな区切り文字が使われています。このツールでは、カンマ( , )、セミコロン( ; )、タブ( \t )の3種類から選択できます。正しい区切り文字を選ばないと、パースエラーが発生し、データが正しく分解されません。特に、数値データにカンマが含まれている場合(例:「1,234」)や、住所にセミコロンが含まれている場合などは、意図した分解が行われない原因になります。
CSVの標準仕様(RFC 4180)では、フィールド内に区切り文字を含める場合、そのフィールドを引用符( " )で囲むことが定められています。しかし、すべてのCSVファイルがこの規則に従っているとは限らず、引用符の扱いが不適切なファイルはパースエラーを引き起こします。
引用符と改行:CSVの脆弱性
CSVは引用符の扱いに脆弱です。フィールド内に区切り文字や改行を含める場合、RFC 4180ではフィールドを引用符で囲み、フィールド内の引用符は "" のようにエスケープします。しかし、このルールを守っていないCSVファイルは多く、パース時にエラーが発生します。
ツールは、引用符が正しく処理できない場合、エラーメッセージを表示します。具体的には、「This CSV could not be parsed.」というメッセージが表示されます。また、フィールド内に改行が含まれている場合(例えば、複数行の住所データ)、CSVでは引用符で囲まれている必要があります。ツールは引用符内の改行を \n としてJSONの文字列に保持しますが、引用符が欠けていると、行として誤って解釈されます。
エラーハンドリングと制限事項
このツールは、明確なエラーメッセージを表示して、問題の特定を助けます。以下は、表示される可能性のあるエラーメッセージとその条件です。
- CSVがパースできない場合:「This CSV could not be parsed.」
- データ行がない場合:「This file has no table rows.」
- 行数制限超過:「This table has more than ‹max› rows.」(具体的な最大数はファクトシートに記載なし)
- 列数制限超過:「This table has more than ‹max› columns.」
- ファイルサイズ制限超過:「This file is too large. Use a file under ‹max›.」
- ファイルが選択されていない場合:「Choose one file first.」
- ファイル形式が誤っている場合:「Choose a CSV, JSON or XLSX file.」
- 変換が長時間かかる場合:「This conversion is taking too long. Try a smaller file.」
これらのメッセージは、変換が失敗した理由をユーザーに正確に伝えます。
データ型と先頭ゼロの保持:自動変換の落とし穴
CSVはすべての値を文字列として扱うため、先頭ゼロ(例えば、郵便番号「00123」)はそのまま保持されます。しかし、JSONを受け取る側のアプリケーションやパーサーが自動的に数値に変換する場合、先頭のゼロは失われます(「123」になる)。このツールは変換時に自動型変換を行わないため、JSONファイル内ではあくまで文字列です。後続の処理で型変換が発生するかどうかは、ユーザーの環境に依存します。
数値、日付、ブール値など、特定のデータ型を期待する場合、変換後のJSONを手動で修正する必要があります。ツールはこれらの型を自動認識しません。
クライアントサイド処理とプライバシー
このツールはブラウザ上で完全に動作し、ファイルがサーバーにアップロードされることはありません。そのため、敏感なデータ(顧客リスト、財務データ、個人情報など)を含むCSVファイルを変換する場合でも、データが外部に送出されるリスクはありません。変換はすべてローカルで実行されます。
逆変換(JSON→CSV)との比較
JSONからCSVへの変換は、CSVからJSONへの変換よりも複雑です。なぜなら、JSONにはネストされたオブジェクトや配列が含まれる可能性があり、それらをフラットな表形式に展開する必要があるからです。一方、CSV→JSONは単純な1対1のマッピングで済みます。ただし、型の扱いは逆になります。JSONには数値やブール値などの型情報が含まれるため、CSVに変換するときはそれらをテキストに変換する必要があります。このツールでは、逆変換時にも自動型変換は行われません。
FAQ
Q: CSVの数字がJSONで文字列になっているのはなぜですか?
A: CSVはすべての値をテキストとして扱います。このツールは変換時に型変換を行わないため、JSONでもすべての値が文字列として出力されます。
Q: 郵便番号の先頭のゼロを保持したいのですが、どうすればいいですか?
A: このツールは自動的に先頭のゼロを保持します。ただし、JSONを受け取った後の処理で数値型に変換するとゼロが失われる可能性があるため、その点に注意してください。
Q: CSVに改行が含まれていますが、変換は正しく行われますか?
A: 引用符(")で囲まれたフィールド内の改行は、JSONでは \n として保持されます。引用符がない場合は、行の区切りと誤解釈される可能性があります。
Q: エラーメッセージ「This CSV could not be parsed.」が表示されました。どうすればいいですか?
A: 区切り文字が正しいか確認してください。また、引用符の使い方や各行の列数が揃っているかを確認してください。
Q: 変換中に「This file is too large.」と表示されました。制限はどれくらいですか?
A: 具体的なファイルサイズ制限はファクトシートに明記されていません。ファイルを分割するか、データ量を減らしてから再度試してください。
Q: 変換結果のJSONをネスト構造にすることはできますか?
A: このツールはフラットなテーブル構造のみをサポートしています。ネスト構造が必要な場合は、変換後に手動で編集する必要があります。