JSONからCSVへの変換:階層データを平らな表にする仕組み
このツールが扱うのは、JSON(階層構造・型を持つデータ形式)からCSV(平ら・型なしの表形式)への変換です。JSONのオブジェクトや配列、数値、真偽値、nullといった要素を、すべて文字列としてフラットな行と列に並べ直します。変換はすべてブラウザ内で完結し、あなたのデータがサーバーに送信されることは一切ありません。
変換の前提:JSONが「table-shaped」であること
このツールが受け付けるJSONは、次の2パターンに限られます。
- オブジェクトの配列:
[{...}, {...},...]。各オブジェクトが1行になり、キーが列名になります。 - 配列の配列:
[[...], [...],...]。内側の配列が1行になり、要素がそのまま列になります。
この形になっていないJSON、たとえば単一のオブジェクト{...}やネストが不均一なデータは「This JSON is invalid or not table‑shaped.」というエラーで拒否されます。変換前に、出力したい表の形を頭の中でイメージしておく必要があります。
階層構造の平坦化とドットパス表記
JSONのネストされたオブジェクトは、そのままCSVに表現できません。このツールは、キーを「ドットパス」で連結して列名とします。
例:
{
"name": "田中",
"address": {
"city": "東京",
"zip": "100-0001"
}
}
は、CSVでは以下の列に展開されます。
| name | address.city | address.zip |
|---|---|---|
| 田中 | 東京 | 100-0001 |
配列の中に配列がある場合は、そのまま行として保持されます。たとえば``は2行2列の表になります。オブジェクトと配列が混在する複雑な構造では、自動的な平坦化だけでは意図した表にならない可能性があります。その場合は、変換前にJSONをtable-shapedに整形する必要があります。
区切り文字の選択とCSV引用ルール
CSVの区切り文字は、Comma(カンマ)、Semicolon(セミコロン)、Tab(タブ)から選べます。デフォルトのカンマは多くのアプリケーションで標準ですが、国や地域によってはセミコロンが使われます(例:ドイツ語版Excel)。タブはTSVファイルとして扱いたい場合に使います。
CSVには引用ルールが必須です。値の中に区切り文字、改行、ダブルクオートが含まれる場合、その値全体をダブルクオートで囲み、値中のダブルクオートは2重にしてエスケープします。このツールは自動的に処理するので、手動で気にする必要はありません。
型情報の消失とデータ損失のリスク
JSONでは数値、真偽値、nullという型が保持されていますが、CSVはすべて文字列として扱います。そのため、次のような変化が起こります。
| JSONの型 | CSVでの表現 | 注意点 |
|---|---|---|
| 数値 | 文字列 | 先頭のゼロは消失(001 → 1) |
| 真偽値 | 文字列 | true → "true"、false → "false" |
| null | 空文字列 | 何も書かれないセルになる |
| 文字列 | そのまま | 引用ルールは適用される |
特に先頭ゼロの消失は、郵便番号や製品コードなどでトラブルの原因になります。CSV出力後にExcelなどで開くと自動的に数値と解釈されてしまうため、変換後も先頭ゼロを保持したい場合は、CSV出力後に別途文字列として書式設定する必要があります。
ファイルサイズと行・列の制限
変換できるファイルには上限があります。ファイルサイズは最大8MBです。行数は最大10,000行、列数は最大200列です。これらを超えた場合はエラーメッセージが表示されます。
また、変換に約12秒以上かかった場合も「This conversion is taking too long. Try a smaller file.」と中断されます。すべてクライアントサイドで処理されるため、巨大なファイルはブラウザのメモリ制限に引っかかる可能性があります。
変換が失敗する主なエラーとその意味
エラーメッセージは具体的に何が問題かを示しています。よくあるものをまとめます。
- 「Choose a CSV, JSON or XLSX file.」:対応外のファイル形式が指定された。
- 「This file is too large. Use a file under ‹max›.」:ファイルサイズが8MBを超えている。
- 「This JSON is invalid or not table‑shaped.」:JSONのパースに失敗したか、上記のtable-shaped条件を満たしていない。
- 「Could not convert this file.」:一般的な変換エラー。ファイルの内容を確認する。
- 「このファイルにはテーブルの行がありません。」:ファイルにテーブル行がない。
- 「Conversion cancelled.」:ユーザーが処理をキャンセルした。
- 「This conversion is taking too long. Try a smaller file.」:タイムアウト。ファイルサイズを減らすか、行数を減らす。
これらのエラーはすべてブラウザ内で検出されるため、データが外部に漏れることはありません。
FAQ
Q: JSONに複数の配列がある場合、どうなりますか? A: 変換できるのは単一の配列のみです。複数のトップレベル配列がある場合、table-shapedではないと判断されてエラーになります。変換前に1つの配列にまとめる必要があります。
Q: ネストが3階層以上あるオブジェクトもドットパスで平坦化されますか?
A: はい。たとえばa.b.cのように、すべての階層がドットで連結されて1つの列名になります。ただし、配列の中にオブジェクトが入っている場合の扱いは、その配列が均一な構造であるかどうかに依存します。
Q: 変換後にCSVをExcelで開くと文字化けします。なぜですか?
A: そのCSVがUTF-8でエンコードされている場合、Excelが正しく認識しないことがあります。対処法として、変換後にCSVファイルをメモ帳などで開き、先頭にBOM(U+FEFF)を追加するか、Excelの「データ」タブから「テキスト/CSVから」を選んでインポートしてください。
Q: JSONのキーにドットが含まれていたらどうなりますか? A: ドットパス表記と競合します。このツールでは、キーにドットが含まれている場合でもそのままドットで連結するため、元のキー構造が復元できなくなる可能性があります。事前にJSONのキーを確認しておくことを推奨します。
Q: 空の配列や空のオブジェクトはどう扱われますか? A: 空の配列は列が作成されず、該当セルは空になります。空のオブジェクトも同様で、キーがないため何も出力されません。ただし、配列内の要素数が不均一な場合、列数が揃わずエラーになることがあります。
Q: このツールはJavaScriptオブジェクトのメソッドや関数も変換できますか?
A: できません。JSONはデータ形式であり、関数やメソッドを含みません。もしJavaScriptのオブジェクトを変換したい場合は、事前にJSON.stringify()でJSON文字列に変換してください。