CSV to JSON 変換ツール
CSVファイルをアップロードまたはデータを貼り付けてJSON形式に変換
CSVファイルをここにドロップするか、クリックして選択
CSV to JSONとは?
CSV to JSONは、CSV(カンマ区切り値)データをJSON(JavaScriptオブジェクト表記)形式に変換するオンラインデータ変換ツールです。
CSVは、表計算ソフトやデータベースのエクスポートで広く使われている一般的な表形式データです。JSONは、構造が明確で解析しやすいことから、現代のWebアプリケーションで最も一般的なデータ交換形式となっています。
このツールを使えば、CSVデータを素早くJSON配列やオブジェクトに変換でき、プログラミングやデータ処理に便利です。
使い方
使い方
- 左側の入力パネルにCSVデータを貼り付けるか入力してください
- 適切な区切り文字を選択してください(デフォルトはカンマ)
- 最初の行をフィールド名として使うかどうかを選択してください
- 右側のパネルにJSON結果が自動生成されます
CSV解析の注意点
- JSON出力を信頼する前に、区切り文字、引用符の処理、ヘッダー行の設定を確認してください。
- 大きなCSVファイルには空行、埋め込みカンマ、引用符内の改行が含まれることがあります。変換後は数行をプレビューして確認してください。
利用シーン
仕組み
CSV のパースは IETF RFC 4180 の文法に従います。各レコードは CRLF(一部の方言では LF または CR も受け付ける)で終端し、各レコードは区切り文字(RFC ではカンマですが、TSV、セミコロン、パイプも広く使われる変種)で区切られたフィールドを含みます。区切り文字、CR、LF、二重引用符を含むフィールドは二重引用符で囲む必要があり、内部の二重引用符は二重化によりエスケープされます(Hello "world" は "Hello ""world""" になります)。このページのパーサーは 4 つの状態(field_start、in_unquoted、in_quoted、after_quote)を持つステートマシンで、文字列ストリームに対して O(n) の単一パスで入力を処理します。10 MB、100,000 行の CSV でも典型的なノートパソコンでは 1 秒以内に完了し、行ごとの中間トークン配列を確保することはありません。 エンコーディングには明示的な処理が必要です:ファイル先頭の UTF-8 BOM(EF BB BF)はパース前に除去されます。さもなければ最初のヘッダー名が不可視の U+FEFF コードポイントで始まり、下流の JSON.parse の等価性チェックが失敗します。Windows の Excel エクスポートは現在も CRLF かつ UTF-8 with BOM であることが多く、macOS Numbers とほとんどの Unix ツールは BOM なしの LF がデフォルトです。ヨーロッパのスプレッドシートでは、多くのロケールでカンマが小数点区切りであるため(49,90 EUR のように 49.90 ではなく)、セミコロン区切りのファイルをエクスポートするのが一般的です。そのため区切り文字セレクターはカンマがデフォルトですが、タブ、セミコロン、パイプを第一級の選択肢として公開しています。先頭行をヘッダーとするトグルは、出力形状をオブジェクトの配列(ヘッダーキー -> 文字列値)から配列の配列に変更し、下流のコードの 2 つの一般的な取り込みパターンに対応します。 フィールド値は推論された型ではなく文字列として出力されます。CSV にはスキーマがないため、01234(ゼロ埋め ID)、1e10(電話番号のように見えるが JSON.parse が数値に強制変換する文字列)、2024-13-45(不正な日付)はすべてそのまま保持されます。これは意図的な設計です。下流の型付き API が zod、Joi、または手書きの変換レイヤーで明示的なルールを適用できますが、コンバーターが既に落とした先頭ゼロは復元できません。出力は JSON.stringify(rows, null, 2) で生成され、シンタックスハイライターを通じてレンダリングされます。ソース CSV は Blob 上の FileReader.readAsText() で読み込まれ、バックエンドにアップロードされることはないため、人事エクスポート、財務台帳、顧客リストをブラウザセッション外に出さずに変換できます。
- RFC 4180 文法:区切り文字/CR/LF/" を含むフィールドは引用符で囲む必要がある。内部の引用符は "" として二重化。
- 状態 field_start、in_unquoted、in_quoted、after_quote を持つ単一パス O(n) ステートマシン。
- UTF-8 BOM(EF BB BF / U+FEFF)はファイル先頭で除去され、ヘッダーキーをクリーンに保つ。
- ヨーロッパのスプレッドシートではロケール設定でカンマが小数点区切りのため、区切り文字として ; をよく使用。
- 先頭行をヘッダーとすると出力が Array<Record<string,string>> と Array<Array<string>> の間で切り替わる。
- すべてのフィールド値は文字列のまま。01234 のようなゼロ埋め ID は型推論が実行されないため保持される。
- FileReader.readAsText() で Blob をローカル処理。アップロードなし。人事/財務/ステージングのエクスポートに安全。
使用例
ヘッダー行付き CSV → JSON オブジェクト配列
CSV 入力:
name,age,city
Alice,28,New York
Bob,35,London
Carol,42,Tokyo
JSON 出力:
[
{ "name": "Alice", "age": "28", "city": "New York" },
{ "name": "Bob", "age": "35", "city": "London" },
{ "name": "Carol", "age": "42", "city": "Tokyo" }
]カンマを含むクォート付きフィールド
CSV 入力:
id,product,description
1,"Notebook, A5","Hard cover, 200 pages"
2,Pen,"Black ink, 0.5mm"
JSON 出力:
[
{ "id": "1", "product": "Notebook, A5", "description": "Hard cover, 200 pages" },
{ "id": "2", "product": "Pen", "description": "Black ink, 0.5mm" }
]ヘッダーなしの TSV(タブ区切り)
TSV 入力(区切り文字 = Tab、ヘッダーなし):
101 Alice 98.5
102 Bob 87.0
103 Carol 92.3
JSON 出力:
[
["101", "Alice", "98.5"],
["102", "Bob", "87.0"],
["103", "Carol", "92.3"]
]セミコロン区切り(欧州の表計算ソフト出力)
CSV 入力(区切り文字 = ;):
product;price_eur;stock
Keyboard;49,90;120
Mouse;19,90;345
JSON 出力:
[
{ "product": "Keyboard", "price_eur": "49,90", "stock": "120" },
{ "product": "Mouse", "price_eur": "19,90", "stock": "345" }
]
備考: 数値は文字列のまま保持されます。下流のコードでキャストしてください。よくある質問
どのCSVバリエーションに対応していますか?
標準のRFC 4180 CSV:カンマ区切り、ダブルクォートでフィールドを引用、ダブルクォートを2つ重ねてエスケープ。タブ区切り(TSV)やセミコロン区切りのCSVは区切り文字を変更することで対応できます。異なる行末(LF/CRLF/CR)は自動的に処理されます。
ヘッダーはどのように扱われますか?
「最初の行をヘッダーとする」を有効にすると、パーサーは各ヘッダーセルをその列のJSONキーとして使用し、オブジェクトの配列を生成します。ヘッダーをオフにするとパーサーは配列の配列を生成します。空のヘッダーセルには数値のプレースホルダーキーが付きます。
型はどのように推測されますか?
デフォルトではすべて文字列です。「自動型付け」を切り替えると、数値、ブーリアン(true/false)、nullの解析を試みます。先頭にゼロが付く数値(00123、0042)は、プレフィックスを失わないように文字列のままになります。IDや郵便番号にはこの動作が役立ちます。
フィールドにカンマや改行が含まれている場合はどうなりますか?
フィールドをダブルクォートで囲んでください:"Smith, John" や "line one\nline two"。埋め込みのダブルクォートは2つ重ねます:"He said ""hi"""。パーサーはこれらすべてに対応します。行が途切れている場合、原因は通常クォートの不均衡です。
変換はローカルで処理されますか、それともサーバーで処理されますか?
ローカルで処理されます。解析はJavaScriptを使ってブラウザ内で実行されます。貼り付けたCSVはページから出ません。大きなファイルではブラウザが遅くなる可能性があります。数十MBを超える場合は、処理前に分割してください。
列の順序は保持されますか?
はい。各行はキーの順序がCSVヘッダーの順序と一致するJSONオブジェクトになり、最近のエンジンのJSON.stringifyは挿入順序を保持します。下流のツールが挿入順序を保持しない形でJSONを読む場合、それはそのツールの制限です。
日付はどのように扱えばよいですか?
日付は文字列のままです。任意の日付形式に明確な標準が存在しないため、自動型付けは日付を解析しません(例:1/2/2024は米国では1月2日、ヨーロッパでは2月1日)。下流でネイティブのDateオブジェクトが必要な場合は、インポート前にISO 8601(YYYY-MM-DD)に変換してください。