CSVからJSONへの変換

カンマ区切り値をJSON配列またはオブジェクトに変換します。

CSV → JSONについて

CSV(Comma-Separated Values)はシンプルな表形式データ形式で、JSON(JavaScript Object Notation)はAPIとWebアプリケーションの標準形式です。このツールは、引用符付きフィールド、エスケープされた文字、さまざまな区切り文字を処理しながら、両方の間で変換します。「最初の行はヘッダー」がチェックされると、列名がJSONオブジェクトのキーになります。

仕組み

  1. CSVを貼り付け: CSVテキストを入力フィールドにドロップします。データに合う区切り文字(カンマ、タブ、セミコロン、パイプ)をドロップダウンから選択します。
  2. オプションを構成: 最初の行に列名(JSONキーになる)が含まれる場合は「最初の行 = ヘッダー」をチェックします。数値とブール値を自動的に変換するには「タイプの自動検出」をチェックします。
  3. 変換: 各CSV行は、ヘッダーから取得したキーを持つJSONオブジェクトになるか、ヘッダーがない場合は単純な配列になります。
  4. コピーまたはダウンロード: JSON配列をコピーするか、コードまたはAPIで使用するために.jsonファイルをダウンロードします。

なぜCSVをJSONに変換するのか?

CSVは、スプレッドシート、データベース、分析ツールの普遍的なエクスポート形式です, しかし、ほとんどの最新のAPI、JavaScriptアプリケーション、NoSQLデータベースはJSONで動作します。Google Sheets、Excel、Airtable、データベースツールからのCSVエクスポートをJSONに変換することは、データエンジニアリング、Web開発、API統合における日常的な作業です。このコンバーターは一般的なケースを処理します: カンマを含む引用符付きフィールド、内部のエスケープされた引用符、Windowsの行末(CRLF)、インテリジェントなタイプ検出を伴う混合数値/文字列列。

機能

CSVからJSONへの変換とは何か?

CSVからJSONへの変換は、平坦な表形式のテキストファイル(カンマ区切り値の行)を取り、各行が列ヘッダーをキーとするオブジェクトになるJSON配列を出力します。同じデータ("name,age"改行"Alice,30"改行"Bob,25")は、2行のCSVから2つのオブジェクトのJSON配列に変わり、それぞれにnameとageフィールドがあります。変換は可逆的です(json-to-csvが逆方向をカバーします)。

CSVは表計算ソフト(Excel、Googleスプレッドシート、Numbers、LibreOffice Calc)とSQLデータベース(mysqldump、pg_dump)の普遍的なエクスポート形式のままです。JSONはウェブAPI、NoSQLデータベース、JavaScriptアプリケーションの主要な形式です。両者間の変換はデータエンジニアリング、ETLパイプライン、フロントエンド作業で最も一般的な相互運用タスクです。

このコンバーターは4つの区切り文字(カンマ、セミコロン、タブ、パイプ)、オプションのヘッダー行、数値とブール型の自動検出を処理します。RFC 4180のクオート規則を実装しているので、コンマ、改行、または二重引用符を含むクオートされたフィールドが正しく解析されます。出力はコピーまたはダウンロードの準備ができた2スペースインデントの整形JSONです。

コンバーターの中身

上部のコントロールバーは、解析動作を変更する3つのつまみを公開します: 区切り文字のドロップダウン(カンマ、セミコロン、タブ、パイプ)、最初の行はヘッダーのチェックボックス、型を自動検出のチェックボックスです。最初にソースデータと一致する区切り文字を選択し、次にヘッダー行をオブジェクトのキーに昇格させるか、データ行として保持するかを決定します。

2つのテキストエリアは、左にCSV入力、右にJSON出力を表示します。出力は読み取り専用で、JSONに変換をクリックした後に更新されます。ボタンの下の行カウンターは、パーサーが認識した行数を示します。予想と異なる場合は、区切り文字を再確認するか、入力に不均衡な引用符がないか探してください。

5つのアクションボタンがペインの下にあります: JSONに変換は変換を実行し、コピーは出力をクリップボードに書き込み、サンプルは予想される形式が見られるようにサンプルCSVを読み込み、クリアは両方のテキストエリアを空にし、ダウンロードはJSONを.jsonファイルとして保存します。サンプルをクリックすると表示される非表示のプレビューテーブルもあり、解析された行を表形式のレイアウトで表示します。

歴史と背景

ホレリスのパンチカードが表データを開始(1890)

1890年の米国国勢調査はHerman Hollerithのパンチカードで実行され、各カードは固定位置のデータ列を保持していました。データ形式としての行と列のアイデアはデジタルコンピュータより50年先行します。すべての最新の表形式(CSV、TSV、Excel、Parquet)はその矩形の形状をパンチカードまで遡ります。ホレリスの特許から成長したComputing-Tabulating-Recording Companyは1924年にIBMになりました。

FORTRANのリスト指向I/OからCSVが出現(1972)

IBMの1972年のFORTRANコンパイラは、カンマで区切られた値を1回の呼び出しで複数の変数に読み込めるリスト指向I/Oを導入しました。この慣習はBASIC、メインフレームレポート形式、初期のパーソナルコンピューティングに広がりました。1980年代までにほとんどの表計算プログラム(VisiCalc、Lotus 1-2-3、Excel)はカンマ区切りテキストをエクスポートできました。単一の仕様がなかったので、方言が増殖しました。

RFC 4180がCSVを標準化(2005)

Yakov Shafranovichの2005年10月に公開されたRFC 4180は、CSVに最初に広く引用された仕様を与えました。CRLF行終端の使用、二重引用符のエスケープ(クオートされたフィールド内の引用符は2つの引用符として書かれる)、単一の区切り文字を定義しました。RFCはInformationalで、Proposed Standardではなかったので、多くのツールが依然として逸脱していますが、RFC 4180は整形CSVがどのように見えるかの正規の参考資料のままです。

JSONが仕様化(2001)と標準化(2013)

Douglas Crockfordは2001年4月にJSONを文書化しました。JavaScriptオブジェクトをシリアル化するための明白な形式でしたが、すべての言語にすぐに広がりました。ECMA-404は2013年にそれを標準化し、RFC 8259は2017年にRFC 4627に置き換わりました。この形式は意図的に最小限(コメントなし、スキーマなし)であり、それがまさにAPIの共通語になった理由です。

ロケール固有のCSVバリエーションが出現(1990年代以降)

コンマが小数点として使用される国(フランス、ドイツ、ヨーロッパ大陸の大部分、ブラジル)では、Excelは小数点コンマとの衝突を避けるためにセミコロン区切りでCSVをエクスポートします。英語圏の国ではコンマが残ります。同じExcelインストールがオペレーティングシステムのロケールに応じて異なるCSVを生成するため、このコンバーターは推測する代わりに区切り文字ドロップダウンを公開しています。

PapaParseとブラウザ内CSVの台頭(2014)

Matt HoltのPapaParse(2014)は事実上のJavaScript CSVパーサーになりました。その設計(区切り文字の自動検出、ウェブワーカーで大きなファイルを処理、厳密なRFC 4180準拠)は後に続くすべてのブラウザ内コンバーターのテンプレートになりました。このツールは、4つの一般的な区切り文字と最も引用されたRFC 4180のケース用に調整された軽量パーサーを実装しており、ワーカー(このUIで典型的なキロバイトからメガバイトの入力には不要)を含みません。

実用的なワークフロー

スプレッドシートエクスポートからAPIリクエストボディ

GoogleスプレッドシートからCSVとして200行の連絡先リストをエクスポートしました。ここに貼り付け、最初の行はヘッダーのチェックを残し、変換をクリックします。出力されたJSON配列は、bulk createを期待するCRM APIエンドポイントにPOSTする準備ができています。

CSVからデータベースシードファイル

レガシーシステムから製品のCSVがあります。JSONに変換し、seed.jsonとして保存し、mongoimportまたはAWS CLIでMongoDBまたはDynamoDBにロードします。JSON配列は明示的なスキーマなしでコレクションに直接マッピングされます。

チャートライブラリ用のデータ(D3、Chart.js、Recharts)

D3.jsはd3.csv経由でCSVを直接受け入れますが、Chart.jsとRechartsはJSONを望みます。月次売上のCSVをここで変換し、結果の配列をReactコンポーネントにドロップし、チャートpropに渡します。型を自動検出オプションは、数値列が文字列ではなく実際の数値になることを保証します。

フロントエンド用のモックデータ

バックエンドが存在する前にUIを構築する場合、モックデータはrequireまたはfetchでインポートされるJSONファイルにうまく収まります。スプレッドシートでレコードをスケッチし、CSVをエクスポートし、ここで変換し、mockData.jsonに貼り付けます。スプレッドシートの編集(JSONを手で編集するよりも簡単)と再変換で反復します。

jqを使ったログファイル分析

一部のサーバーログはCSV風です。JSONに変換し、jqを通してパイプし、フィルター、ソート、集計します。変換は平坦ファイルログと構造化レコードを期待するストリーム処理ツールとのギャップを埋めます。

CMSバルクインポート

ヘッドレスCMSプラットフォーム(Contentful、Sanity、Strapi、Directus)は通常JSONインポートを受け入れます。編集者は使い慣れたスプレッドシートでコンテンツを書き、あなたはここで変換し、一回限りのインポートスクリプトを実行します。ヘッダー行はCMSスキーマにマッピングされるフィールド名になります。

よくある落とし穴

内部コンマを持つクオートフィールド

1,"Smith, John",30のような行は、クオートフィールド内のコンマは区切り文字ではなくデータなので、4つではなく3つの論理フィールドを持ちます。このパーサーはRFC 4180の二重引用符エスケープを尊重しますが、不正なCSV(欠落した閉じ引用符、一致しない引用符)は意味のないJSONを生成します。CSVリンターを使用するか、構造エラーを表面化するために最初にスプレッドシートにファイルをインポートしてください。

クオートフィールド内の埋め込み改行

RFC 4180は二重引用符でクオートされたフィールド内のリテラル改行を許可しますが、多くの単純な行ベースパーサーはすべての改行をレコード区切り文字として扱います。CSVに引用符内のマルチライン コメントまたは住所がある場合、行数が視覚的な行数と一致しない可能性があります。このコンバーターはそれらを正しく処理しますが、下流ツールはそうでない場合があります。

ファイル開始時のBOM(Byte Order Mark)

Windowsツール(特にExcel)は、UTF-8 CSVファイルに3バイトのBOM(EF BB BF)を時々プレフィックスします。BOMプレフィックスファイルからコピーすると、最初のヘッダーには、コードで"name"と"name"を一致させない不可視のプレフィックスが付きます。16進エディタでファイルを開くか、ここに貼り付ける前にワンライナー(unixのsed、PowerShellのGet-Content)でBOMを削除してください。

ロケールごとのコンマ対セミコロン

フランスロケールのExcelエクスポートは、コンマが小数点であるためセミコロンを使用します。デフォルトのコンマ区切り文字でインポートすると、1,234が2つのフィールドに分割されます。常にソースに一致する区切り文字を選択してください。不明な場合は、プレーンテキストエディタで最初の行を見てください。明らかな区切り文字が望ましいものです。

型の強制で失われる先頭ゼロ

郵便番号、電話番号、製品SKUはしばしばゼロで始まります(例:"01234")。型を自動検出はこれらを整数に強制し、先頭のゼロ(1234)を失います。先頭のゼロが重要な列には、型を自動検出のチェックを外して値が文字列のままになるようにします。または、変換してから影響を受けるフィールドを手動で引用符で囲みます。

Excel数式インジェクション(CSV爆弾)

CSVセルが=、+、-、または@で始まる場合、Excelはファイルが開かれたときにそれを数式として評価することがあります。=cmd|'/c calc'!A1はWindowsマシンで計算機を起動します。これは、ウェブアプリがユーザー制御データをCSVにエクスポートする際の既知の攻撃ベクトルです。JSONへの変換は脅威を中和します(JSONには数式評価がありません)が、元のCSVは依然として危険です。

プライバシーとデータ処理

すべての解析は、小さなJavaScript関数を使用してブラウザで行われます。CSVやJSONをサーバーに送信したり、入力をログに記録したり、出力を保存したりしません。コピーとダウンロードボタンは、標準のユーザージェスチャAPIを介してオペレーティングシステムと対話し、サードパーティには見えません。

ページが読み込まれると、ツールはオフラインで動作します。ネットワークから切断して、顧客リスト、内部SKU、またはデバイスを離れてはならないデータを変換できます。データパスが外部境界を越えることはないため、HIPAA隣接のワークフローに安全です。

このコンバーターを使用しない場合

非常に大きなファイル(10 MB以上)

コンバーターは入力全体をメモリに保持し、同期的に処理するため、数百万行のCSVではブラウザタブがフリーズします。10メガバイトを超えるファイルには、一度に1行を読み取るストリーミングパーサー(PythonのcsvモジュールNodeのcsv-parse、Rustのcsvクレート)を使用してください。

セル内のネストされたオブジェクト形状

CSVは設計上フラットです。データにセル内のネストされたオブジェクトまたは配列がある場合(例:カンマ区切り値を持つタグ列)、変換はそれらを配列ではなく文字列として扱います。文字列を分割し、ネストされた形状を再構築するために、JavaScriptまたはPythonで後処理ステップが必要になります。

バイナリまたは非UTF-8データ

古いWindowsシステムのCSVファイルは、UTF-8の代わりにWindows-1252(CP-1252)としてエンコードされている場合があります。特殊文字(é、ñ、ü)は、UTF-8テキストエリアに貼り付けるとmojibakeとして表示されます。貼り付ける前にテキストエディタでファイルをUTF-8として再保存(またはコマンドラインからiconvを実行)してください。

リアルタイムストリーミングデータ

CSVが継続的に追加されている場合(tailスタイルのログフィード)、このバッチツールは追いつけません。websocketにパイプされたストリーミングパーサー、またはCSV ingestモードを持つデータベース(Postgres COPY FROM、MySQL LOAD DATA INFILE)を使用してください。

その他の質問

パーサーは厳密にRFC 4180準拠ですか?

ほとんど。パーサーは二重引用符のエスケープ(クオートフィールド内の2つの引用符はリテラル引用符を意味する)、コンマと改行が埋め込まれたクオートフィールド、CRLFまたはLF行終端を処理します。先頭または末尾のスペースを含む引用符なしフィールドを受け入れることで厳密なRFC 4180から逸脱します(仕様では許可されていません)。この実用的な寛容さは、ほとんどの実世界のCSVエクスポーターが出力するものと一致します。

Excelの奇妙なCSVは出力にどのように影響しますか?

ExcelはUTF-8ファイルにBOMを追加し、時にはWindows-1252エンコーディングを使用し、非英語ロケールではセミコロンを優先します。貼り付ける前にBOMを削除し、UTF-8として再保存してください。ドロップダウンから正しい区切り文字を選択してください。数値のような列の先頭のゼロに注意してください。Excelは多くの場合CSVを開くときにそれらを独自に削除します。

BOM付きUTF-8と純粋なUTF-8はどうですか?

BOM付きUTF-8には、エンコーディングを示す3バイトのプレフィックス(EF BB BF)があります。ほとんどのウェブツール(ブラウザ、JSONパーサー)はBOMなしのプレーンUTF-8を好みます。CSVがExcelのUTF-8エクスポートから来た場合、BOMが存在する可能性があり、最初のヘッダーフィールドには静かにそれが含まれます。貼り付ける前にBOMを削除してください(sed -i '1s/^\xEF\xBB\xBF//' file.csv)。

CSVセル内にJSONを埋め込めますか?

できます。JSONを二重引用符で囲み、内部の引用符をエスケープします。コンバーターはセルを文字列として扱うので、内部のJSONは出力の文字列のままです。後処理ステップ(コードでそのフィールドにJSON.parse)が埋め込みオブジェクトを再構築します。これはスプレッドシートエクスポート内にJSONを送信する際の一般的なパターンです。

なぜ出力JSONに一部の列が欠けているのですか?

最も可能性が高いのは、行にヘッダーよりも少ない列があることです(末尾の空のセルがエクスポートで削除されました)。パーサーは欠落値に対してundefinedを発行し、JSON.stringifyはそれを削除するため、結果のオブジェクトは予想よりも少ないキーを持ちます。ソースファイルをスプレッドシートで開いて、どの行が短いかを確認し、データを修正するか、デフォルトを埋めるために後処理してください。

これはTSV(タブ区切り値)をサポートしますか?

はい、区切り文字ドロップダウンからタブを選択してください。CSVファイルにクオートされたセルが多すぎる場合(スプレッドシートのセルではタブが有効なデータになることはほとんどないため)、TSVファイルが一般的です。パーサーは区切り文字を除いてTSVを同じように処理します。クオートとエスケープのルールは同じです。

関連ツール