CSVをJSONに変換する方法

· 7 分で読めます

CSV(Comma-Separated Values)は表形式データの最もシンプルな形式で、どんな表計算ソフトでもエクスポートできます。JSON(JavaScript Object Notation)はWeb APIやモダンなアプリケーションの標準フォーマットです。両者の変換は、開発で最もよく行われるデータ作業の1つです。ブラウザベースのコンバーターは、データをサーバーにアップロードせずに、変換作業全体をローカルで処理します。

CSVからJSONへの変換が必要な場面

CSVがJSONになる仕組み

CSVファイル:

name,age,city
Alice,30,New York
Bob,25,London

はJSONのオブジェクト配列になります:

[
  {"name": "Alice", "age": "30", "city": "New York"},
  {"name": "Bob", "age": "25", "city": "London"}
]

最初の行(ヘッダー)がキーになります。それ以降の各行がオブジェクトになります。

変換の手順

  1. CSVデータを貼り付ける: ヘッダー行のあるカンマ区切りデータを入力します。
  2. 区切り文字を選ぶ: カンマ、セミコロン、タブ、パイプから選びます。ほとんどの場合、ツールが自動検出します。
  3. コピーまたはダウンロード: JSON出力を確認し、クリップボードにコピーするか.jsonファイルとしてダウンロードします。

CSVとJSONの簡単な歴史

CSVは何十年も古いフォーマットです。カンマ区切りのテキストという考え方は1960年代から1970年代に、メインフレームのプログラム間でデータを交換する方法として遡れます。IBM Fortran(1972年)はカンマ区切り出力を生成するリスト指向I/Oをサポートしていました。CSVは2005年のRFC 4180まで正式に標準化されませんでしたが、その時点ですでに数十億のCSVファイルが微妙なバリエーション(クォートルール、改行コード、エンコーディング)とともに存在していました。

JSONはずっと後にやってきました。Douglas Crockfordが2001年に仕様を定め、正式なRFC 4627が2006年、ECMA-404が2013年です。JSONはWeb向けに設計され、CSVはメインフレームでのバッチデータ処理向けに設計されました。両フォーマットには異なる強みがあります:

側面CSVJSON
構造フラットな表(行と列)ネスト可能、階層的
型なし(すべてテキスト)型あり(string、number、bool、null、array、object)
ヘッダー最初の行を慣習的に使うオブジェクトごとにフィールド名
サイズ表データではコンパクト構造を含むため冗長
ツールExcel、すべての表計算ソフトあらゆるモダンなプログラミング言語
ストリーミング1行ずつ簡単デフォルトはファイル全体のパース(ただしJSON Linesも存在)
厳格な仕様RFC 4180(2005年)、しばしば無視されるRFC 8259(2017年)、厳格

CSVからJSONへの変換は、本質的に行指向のフラットなデータからキー値オブジェクト記法への翻訳です。難しさのほとんどは、CSV仕様が予期しなかったエッジケース(クォートされた値、埋め込み区切り文字、UTF-8以外のエンコーディング)の扱いにあります。

厄介なCSVデータの扱い

クォートされた値: 値に区切り文字が含まれる場合(カンマを含む住所など)、二重引用符で囲む必要があります: "New York, NY"。優れたコンバーターはこれを正しく処理します。

空の値: 空のセルはJSONでは空文字列("field": "")になります。nullとして必要な場合は、出力を後処理する必要があるかもしれません。

数値: CSVにはデータ型がありません。すべてテキストです。JSON出力では数値が文字列(30ではなく"30")になります。アプリケーションで実際の数値が必要な場合は、変換後にパースしてください。

値の中の改行: 一部のCSVファイルには複数行の値(引用符で囲まれている)があります。すべてのコンバーターがこれを扱えるわけではないので、特定のデータでテストしましょう。

エスケープされた引用符: クォートされた値の中の引用符は、二重にすることでエスケープされます: "She said ""hello"""。ほとんどのパーサーはこれを正しく処理します。

末尾の空白: name ,age, cityのようなヘッダー内の余分なスペースは、汚いキーを作ります。優れたコンバーターはデフォルトでトリムし、空白を文字どおりに保持するものもあります。

バイトオーダーマーク: ファイルの先頭にあるUTF-8 BOMが、最初のヘッダーの先頭3文字として現れることがあります。一部のコンバーターはBOMを取り除き、そうでないものもあります。

異なる改行コード: WindowsのCSVファイルはCRLF、UnixはLF、古いMacはCRを使っていました。堅牢なパーサーは3つすべてを扱います。

出力フォーマットのバリエーション

CSV-JSONコンバーターはしばしば複数の出力オプションを提供します:

出力最適な用途
オブジェクトの配列[{"a":1},{"a":2}]APIレスポンス、デフォルト
オブジェクトのオブジェクト(最初の列でキー化){"id1":{"name":"x"},"id2":{...}}ルックアップテーブル、IDをキーとするレコード
配列の配列[["a","b"],[1,2],[3,4]]順序を保持する生の行データ
列指向{"a":[1,3],"b":[2,4]}統計分析(pandasとの相性が良い)
JSON Lines(NDJSON){"a":1}\n{"a":2}ストリーミング、ログ処理
ヘッダーでネストaddress.cityから[{"address":{"city":"NY"}}]フラットなCSVからのネストデータ

デフォルトはオブジェクトの配列で、ほぼすべてのWeb APIシナリオで動作します。JSON Linesは、何百万行もあってストリーミング処理が必要な場合に役立ちます。

型の推論

一部のコンバーターは型の推論を提供します:

データを管理している内部利用には、自動推論が時間を節約します。信頼できない入力には、型を文字列のままにして、コードで明示的にパースしましょう。

よくある落とし穴

使いこなしのヒント

プライバシーと機密データ

CSV-JSONコンバーターは完全にブラウザ内で動作します。貼り付けたデータ、中間処理、出力JSONはすべてデバイス上に留まります。サーバーへのアップロード、ロギング、第三者との共有は一切ありません。

これは変換するCSVが機密データを含むことが多いからです。メールアドレスや電話番号を持つ顧客リスト、給与を持つ従業員レコード、金融取引、営業パイプラインデータ、マーケティングリード、内部の製品分析、EHRシステムからエクスポートされた医療記録、学生の成績、支払い履歴など。クラウド型のCSV-JSONコンバーターはすべての貼り付けをログに記録し、ときには「サービス改善」のために保持し、貼り付けられた顧客リストがログを監視する攻撃者に漏れた実際のデータ漏洩に関与してきました。ブラウザベースのコンバーターは露出ゼロで、データはマシンを離れません。

ブラウザベースの変換は、ページを一度読み込めばオフラインでも動作するため、飛行機の中、インターネットアクセスのないセキュアな環境、または顧客や財務データを第三者のサービスに貼り付けてはいけない場所でデータを処理するのに役立ちます。

よくある質問

ヘッダー行はどうなりますか?

最初の行はJSONオブジェクトのキーとして使用されます。後続の各行は、これらのキーを持つオブジェクトになります。例えば、ヘッダー「name,age」と行「Alice,30」は{"name":"Alice","age":"30"}になります。

どの区切り文字がサポートされていますか?

カンマ、セミコロン、タブ、パイプはすべてサポートされています。ツールは区切り文字を自動的に検出するか、手動で選択できます。

値内のカンマを処理しますか?

はい。二重引用符で囲まれた値(「New York, NY」など)は正しく処理されます, 引用符内のカンマは区切り文字ではなく、値の一部として扱われます。

データはサーバーに送信されますか?

いいえ。すべての変換はブラウザ内で行われます。データがデバイスを離れることはありません。