CSV ⇔ JSON 変換
CSV と JSON を相互変換。引用符・改行を含むセルや区切り文字の自動判別に対応し、ヘッダー行の扱い・型変換・空欄の扱いを選べます。すべてブラウザ上で動作。
型変換は既定でオフです。オンにすると 0123 のような先頭ゼロの値や、桁の大きい数字が壊れる場合があります(郵便番号・電話番号・商品コードなど)。
使い方・詳細情報
このツールでできること
- CSV → JSON: 表計算ソフトから書き出した CSV を、API やコードで扱える JSON に変換します。1行目を見出しとして使えば
[{"列名": "値"}]の形になります。 - JSON → CSV: オブジェクトの配列を表形式にして、Excel や Google スプレッドシートで開ける CSV にします。
引用符・改行を含むセルの扱い
CSV の解析は RFC 4180 に従います。引用符で囲まれたセルの中では、区切り文字も改行もそのまま値として扱われ、連続する2つの引用符 "" は1つの引用符になります。
name,memo\n"佐藤, 花子","改行を\n含むメモ"出力側も同じ規則で、値に区切り文字・引用符・改行・前後の空白が含まれる場合だけ引用符で囲みます。単純な文字列分割では壊れるデータも、そのまま往復できます。
型変換をオフにしている理由
「数値・真偽値を型変換する」は既定でオフです。オンにすると "30" が 30 に、"true" が true になり JSON として自然になりますが、次のような値が壊れます。
- 先頭ゼロ: 郵便番号
0123、商品コード007 - 桁の大きい数字: 16桁を超える ID は精度が落ちて別の数値になる
このツールでは、オンにした場合でも元の表記に戻せる値だけを変換します。「数値にしてから文字列に戻したとき、元と一字一句同じになるか」で判定するので、先頭ゼロ 0123・桁あふれする ID・指数表記 1e3・末尾ゼロ 1.50 はいずれも文字列のまま残ります。とはいえ意図しない変換を避けたい場面が多いので、必要なときだけオンにしてください。
エラーにする CSV / 通す CSV
エラーにするのは「引用符で囲まれたセル」の解釈が確定しない場合だけです。「読めるが整っていない」データは通し、「読めていない」データは止める、という分け方をしています。
エラーにする(値が黙って変わってしまうため)
- 引用符が閉じていない:
1,"twoのまま終わると、後続の行がまるごと1つのセルに吸い込まれ、行が静かに消えます - 閉じた引用符の後に文字が続く:
"two"xは通すと引用符を捨てたtwoxになります。閉じ引用符の後に置けるのは区切り文字か改行だけです
通す(値の解釈が一意に決まるため)
- 列数が揃っていない: 不足を空欄で補い、警告で知らせます
- 囲んでいないセルの中の引用符:
5" x 7"やt"woはそのままの文字として扱います。厳密には RFC 4180 に反しますが、インチ記号のように実データで普通に現れる書き方で、値の読み方に迷いがありません。Excel や Python の csv モジュールなど一般的な実装も同じくそのまま読みます
2^53 を超える整数(64bit ID)
JSON → CSV では、9007199254740993 のような 253 を超える整数が読み込みの時点で丸められます(この例では …992 になります)。JavaScript の数値がそこまでしか正確に表せないためで、このツールに限らず JSON を扱うすべての実装で起きます。
丸めは JSON.parse() の時点で起きるため、読み込んだ後の値から元の桁を復元することはできません。そこで本文を直接調べて、丸められた整数があれば警告します。データベースの ID やスノーフレーク ID を扱うときは、JSON 側で "9007199254740993" のように文字列にしてください。文字列なら桁数に関係なくそのまま通ります。
行数×列数の上限
「列はすべてのキーの和集合にする」をオンにしたまま行ごとにキーが違う JSON を渡すと、列が行数ぶんまで増えます。1万件がそれぞれ固有のキーを1つ持つデータは、入力が 120KB 程度でも 1億セルの表に展開され、ブラウザが固まります。
そのため 行数×列数が100万セルを超える場合はエラーにしています。この形のデータは「列はすべてのキーの和集合にする」をオフにすると、先頭のオブジェクトのキーだけが列になり通ります。
列数が揃っていない CSV
行ごとに列数が違っても変換は止めません。見出しより少ない行は空欄で補い、多い行は余りを切り捨てたうえで、どの行が何列だったかを警告として表示します。実データは不揃いなことが多いため、エラーで止めるより通して知らせるほうが実用的だと考えています。
見出しに同じ名前が複数あるときも警告します(JSON のキーは重複できないため、後の列の値で上書きされます)。
ネストしたデータの扱い
JSON → CSV で値がオブジェクトや配列だった場合は、JSON 文字列のまま1つのセルに入れます({"a":1} はそのまま {"a":1})。a.b や a[0] のような列名に展開(フラット化)はしません。列名の規則が増えると、どんな CSV になるか予測しづらくなるためです。
列は既定ですべてのオブジェクトのキーの和集合です。オブジェクトごとにキーが違うデータでも、どれかに存在するキーはすべて列になります。
信頼できないデータを表計算ソフトで開くとき
表計算ソフトは、セルの値が = + - @ で始まると数式として解釈します。他人から受け取ったデータや外部 API のレスポンスを CSV にして開く場合、悪意のある値が数式として実行されるおそれがあります(CSV インジェクション)。
このツールは値を書き換えずそのまま出力します。変換前後で値が一致することを保証するのが役目なので、勝手に ' を付けるような加工はしません。裏を返すと、危険な値もそのまま通ります。
信頼できない出所のデータを Excel や Google スプレッドシートで開くときは、ファイルを直接開かず「データ」→「テキストから」でインポートし、対象の列を「文字列」に指定してください。この方法なら数式として評価されません。
文字コードと Excel で開くとき
ダウンロードする CSV には BOM 付き UTF-8 を使っています。BOM が無いと Excel が Shift_JIS と解釈して日本語が文字化けするためです。読み込み時は、貼り付けたテキストの先頭に BOM があっても取り除いてから解析します。
データの安全性について
このツールはすべての変換をブラウザ(JavaScript)上で行います。貼り付けたデータがサーバーへ送信・保存されることは一切ありません。ネットワークを切断した状態でも動作します。顧客名簿のような機微なデータの変換にも使えます。