Excel・ヘッダー行・ネストに対応した CSV ⇄ JSON 変換
Excel などで書き出した CSV を JSON 配列に、JSON を CSV にブラウザ上で変換します。1 行目がオブジェクトのキーになり、ネストしたオブジェクトはドット記法の列、配列は 1 セル内の JSON 文字列として扱われます。
この CSV ⇄ JSON 変換ツールの実際の動作
1 行目は必ずヘッダー
CSV → JSON は 1 行目をフィールド名にし、2 行目以降を 1 行 1 オブジェクトにします。ヘッダーのないファイルでは先頭データ行が列名として消費され、ヘッダーのみなら空配列を返します。
ネストはドット記法の列へ
JSON → CSV は meta.x / meta.y のような列を出力し、その CSV を戻すとネストしたオブジェクトに再構築されます。単純な構造は往復できます。
配列はセル内の JSON 文字列
配列やオブジェクトの配列は [1,2,3] のような文字列として 1 セルに収まり、表は矩形のままです。CSV → JSON では JSON らしいセルを配列やオブジェクトに戻します。
数値は推測で、元の型は保証されない
数値セルは数値になります(1.50 → 1.5、1e5 → 100000)。007 のような先頭ゼロは文字列のままですが、2^53 を超える ID は精度を失い、+4 は数値として扱われません。
ブラウザ内で完結、アップロードなし
.csv / .json を選択または貼り付け、結果をコピー・ダウンロードできます。変換は同期的に実行されるため、巨大なファイルではタブが固まります。
CSV ⇄ JSON 変換のよくある質問
CSV にヘッダー行は必要ですか?
必要です。最初の非空行がヘッダーになり、以降の各行が 1 つの JSON オブジェクトになります。ヘッダーがないファイルでは先頭データ行が列名として消費されます。ヘッダーのみのファイルは空配列を返します。
電話番号や郵便番号、注文 ID を文字列のまま保つには?
007 のような先頭ゼロは自動で文字列として残りますが、1.0 は 1、1e5 は 100000 になり、2^53 を超える整数は桁が失われます。「全列を文字列で読む」切替はないため、元ファイル側で引用符を付けるか事前に整形してください。
ネストしたオブジェクトと配列はどう表現されますか?
JSON → CSV は user.name のようなドット記法の列に展開し、配列はセル内の JSON 文字列として保存します。CSV → JSON はドット記法の列をオブジェクトに戻し、JSON らしいセルを解析します。ドットを含むキーは a\.b と書かれ、分割されません。
空値、引用符、改行、区切り文字はどうなりますか?
空セルは空文字列になります。カンマ、引用符、改行は書き出し時に引用され、戻すと正しく復元されます。空行は先頭列だけ埋まった不完全なオブジェクトになり、ヘッダー数を超えるセルは捨てられるか位置がずれます。区切りはカンマのみで、セミコロンやタブのファイルは 1 列として読まれます。
Excel の CSV は \r\n と BOM 付きで、なぜ壊れますか?
パーサーは LF のみで分割するため、CRLF ファイルでは最後のヘッダー名に \r が残り、CRLF を含む引用フィールドが残りのファイルを 1 セルに飲み込むことがあります。UTF-8 BOM も最初のヘッダーキーに付着します。変換前に UTF-8(BOM なし)・LF で保存し直してください。
区切り文字は変更できますか?
できません。区切り文字、引用符、エンコーディングのオプションはなく、カンマ区切りのみ解析します。セミコロンやタブ区切りは 1 列になり、行全体がキーになります。必要なら先にカンマ CSV へ変換してください。
CSV → JSON → CSV は無劣化の往復ですか?
保証されません。列順は保たれますが、型推測、ドット記法への展開、配列の JSON 文字列化、欠けたキーのリテラル出力でデータが変わることがあります。null は null、欠けたキーは undefined という文字列で出力されます。日付らしい値は常に普通の文字列で、JSON エディタでは Date オブジェクトを作れないため日付整形は行われません。書き出し前にオブジェクトの形を揃えてください。

