CSV / TSV ↔ JSON 相互変換
整形処理はすべてブラウザ内で完結します。データは送信されません
CSV(または TSV)を JSON 配列に、あるいは JSON 配列を CSV に戻します。区切り文字は既定で自動判別 —— 判定基準は「どの記号が多く出るか」ではなく、どの区切り文字なら毎行の列数が揃うかです。したがって、メモ列にカンマが混ざったセミコロン区切りの表も正しく読み取れます。 引用符と改行は仕様どおりに扱います。 フィールドに区切り文字・引用符・改行が含まれる場合は引用符で囲み、内部の引用符は二重にします。これが最も重要です —— これを怠ると、フィールド内の改行によって出力 CSV が Excel で1行増え、そこから下の表がすべてずれます。しかもファイル自体は「問題なく開ける」のです。 数値は無損失のときだけ数値にします。 CSV の値はすべてテキストで、一律に数値として読むと2種類の事故が起きます。`007` が `7` になる(識別子の前導ゼロが消える)、長い注文番号が 2^53 を超えて下位桁を失う。そこで既定では「数値にして文字列に戻したとき元と一致する」場合のみ変換します —— `007`・`1.50`・`1e5` は文字列のまま、`30`・`1.5` は数値になります。すべて文字列で読みたい場合は「数値の扱い」を「すべて文字列」にしてください。 さらに Excel 由来の落とし穴を2つ処理します。先頭の BOM はそのままだと最初のキー名に不可視の文字が混ざり(JSON 上は `id` と表示されるのに `obj.id` で絶対に取れません)、ここで除去します。CSV 出力の改行は CRLF で、Excel が無条件に受け付ける唯一の形式です。
機能
- 3 方向:CSV → JSON、JSON → CSV、CSV → SQL(INSERT 文、CREATE TABLE の有無を選択可)
- ⚠️ SQL のテーブル名・列名はホワイトリスト検証を通してから組み立てます —— 不正なものは二重引用符で囲み、値の単一引用符は二重化し、注入の口を作りません
- ⚠️ SQL の型推論はあくまで推測で、CSV → JSON と同じ判定を共有します(`true` はどちらでも文字列)
- 区切り文字の自動判別:カンマ・セミコロン・タブ・パイプ。「出現回数が最多」ではなく「毎行の列数が揃う」で判定します
- 引用符・フィールド内改行・`""` エスケープを RFC 4180 に従って処理。Excel でずれません
- Excel が付ける BOM を除去 —— 残すと最初のキー名に不可視文字が混ざります
- 数値は無損失のときだけ変換:`007`・`1.50`・`1e5`・桁の長い ID は文字列のまま残ります
- 見出し行のない表は配列の配列で出力。`"0"` `"1"` のような本物のフィールド名に見えるキーを捏造しません
- 見出しの重複には接尾辞を付けます(`id` / `id_2`)。後ろの列が前の列を黙って上書きしません
- データ行が見出しより長い場合は余った列を保持し、短い場合は空文字で埋めます
- JSON → CSV では列名を全行のキーの和集合にします。後ろの行にしか出てこない項目が丸ごと落ちません
- 入れ子のオブジェクトと配列は JSON テキストとしてセルに入れます
- 出力はシンタックスハイライト付き。JSON のインデントは 2 / 4 スペースとタブ
使い方
- CSV / TSV または JSON を貼り付けます(JSON として解析できれば JSON、それ以外は CSV として扱います)
- 方向・区切り文字・見出し行の有無は手動でも指定できます
- 結果はその場で更新されます。区切り文字を誤って認識した場合は手動で選び直してください
- コピーして結果を取り出します
よくある質問
- CSV → SQL の型は推測ですか?
- はい、ページにもそう書いてあります。見ているのは値がどんな形をしているかだけです:すべて整数なら `INTEGER`(32 ビットを超えるなら `BIGINT`)、すべて小数なら `NUMERIC`、それ以外は `TEXT`。その列がデータベース上で何を意味するかは知りません —— 電話番号の列はすべて数字ですが、正しい型は `TEXT` です(先頭の 0、国番号の `+`)。`CREATE TABLE` は出発点として扱い、実際の意味に合わせて直してから使ってください。
- 生成された SQL を実行しても安全ですか?
- 文字列を組み立てる部分は注入対策として書いています:テーブル名と列名はまずホワイトリスト(先頭は英字かアンダースコア、以降は英数字とアンダースコア、予約語でないこと)を通し、通らないものは二重引用符で囲みます。値の中の単一引用符は必ず二重化します。どちらも必須です —— CSV の中身は他所から持ってきたもので、1 つのエスケープ漏れがその行の値を早く閉じ、以降が SQL 文の一部になってしまいます。ただし文そのものが妥当かは別の話です:型は推測で、列名は見出し行から来ています。実行前に目を通してください。
- 数値が文字列になったりならなかったりするのはなぜですか?
- 既定の判定基準は往復無損失です。テキストを数値にし、さらに文字列に戻して元と完全に一致する場合だけ変換します。`30` は 30 を経て `30` に戻るので変換されます。`007` は 7 を経て `7` になり元と違うので `"007"` のままです。`1.50` も同様にそのまま。2^53 を超える整数(20桁の注文番号など)は下位桁が失われるため文字列のままです。安全な範囲では数値型が得られ、危険な範囲では不可逆な変更が起きません。すべて文字列にしたい場合は「すべて文字列」を選んでください。
- 区切り文字はどう判定していますか?
- カンマ・セミコロン・タブ・パイプのうち、すべての行が同じ列数に分かれるものを選びます。出現回数だけで判定するとデータ内容に騙されます —— セミコロン区切りの表でも、メモ列にカンマがいくつも入っていればカンマの総数が上回り、計数で選ぶと表全体がずれます。どの候補も条件を満たさない場合(行ごとに列数が違う場合など)はカンマに戻します。誤って認識したら、結果の上にある設定で手動指定してください。
- 空行が消えるのはなぜですか?
- 空行は読み飛ばします。手で編集した CSV には空行がよくありますが、Excel も他のツールも空行からデータ行を作りません。残すと JSON に `{"id":"","name":""}` のような空レコードが増えてしまいます。代償として、単一列の CSV で「その行の値がたまたま空」の場合も一緒に落ちます —— 単一列で空値がある表は、ダミーの列を1つ足してから変換してください。
- 入れ子のオブジェクト(配列)はどうなりますか?
- JSON テキストとしてセルに入ります。たとえば `{"a":{"x":1}}` は `{"x":1}` と書かれた1つのセルになります。CSV には行と列しかなく、入れ子を置く場所がありません。別の方法として `a.x` のような列に展開する手もありますが、列名にドットを許す必要があり、しかも一方向で元に戻せません。構造を保ちたいなら JSON のままにしておき、CSV に変換しないでください。
- Excel で開いて問題は起きませんか?
- 起きません。JSON → CSV の出力は CRLF 改行で、これは RFC 4180 が定める形式であり、Excel が無条件に受け付ける唯一の形式です。カンマや改行を含むフィールドは引用符で囲まれるので、ずれも起きません。逆方向も対応済みで、Excel が CSV の先頭に書く BOM は除去します —— 残すと最初のキーの先頭に目に見えない U+FEFF が入り、表示は `id` と同じなのに `obj.id` では絶対に取れなくなります。
関連ツール
YAML 変換
整形YAML と JSON を双方向に変換します。複数ドキュメント、アンカーと別名、マージキーにも対応し、大きな整数も桁を失いません。エラーは行と列で示します。
JSON 整形
整形JSON をブラウザ内で整形・圧縮・検証。折りたたみ可能なツリーで表示し、キーと値の検索、行番号とハイライト付きの編集、Python dict への変換にも対応。
列の抽出
テキスト各行から指定した列を取り出します。区切り文字で分割する方法と文字位置で切り出す方法の 2 通り。2-4 のような範囲や負の指定にも対応します。
JSON → コード
整形JSON サンプルから TypeScript interface、Go struct、Java class、Rust struct を生成。欠けたキーは任意に、型の衝突は共用型に。すべてブラウザ内で処理します。
SQL 整形
整形SQL をオンラインで整形:キーワードの大文字小文字を統一し、SELECT / FROM / WHERE などの句ごとに改行。圧縮は余分な空白とコメントを削除します。
JSON5 変換
整形JSON5 を標準 JSON に変換。コメント・引用符なしキー・シングルクォート・末尾カンマ・16進数・Infinity に対応し、エラーは行と列を示します。