データ

CSVとJSONの違い:使い分けと変換時の注意点

表計算ソフトの書き出しをAPIに送ったり、APIのレスポンスをExcelで開いたりするには、CSVとJSONの変換が必要です。形式の違いを知っておけば、途中でデータが壊れるのを防げます。

表とツリー

CSV(Comma-Separated Values)は表です。1行目に列名があり、続く各行がレコードで、値はカンマで区切られます。どの行も同じ列を持つ平らなデータを保存する、最も単純で軽い方法です。

JSONはツリーです。オブジェクトの中に配列を、その中にさらにオブジェクトを入れられるので、「1つの注文に複数の商品」のような階層データを自然に表せます。代わりに、レコードごとにキー名が繰り返されるためサイズが大きくなります。

name,city,score
Kim,Seoul,92
Lee,Busan,85

[
  {"name": "Kim", "city": "Seoul", "score": 92},
  {"name": "Lee", "city": "Busan", "score": 85}
]

どちらを使うべきか

CSVに型がないことは重要です。郵便番号の 0123 をCSVに保存すると、Excelが数値として読み込んで先頭の0を落とすことがあります。長いカード番号や注文番号は 1.23E+15 のような指数表記に変わってしまうこともあります。

  • 人がExcelやGoogleスプレッドシートで開いたり編集したりするデータ:CSV。
  • 数十万行の単純なログや統計:CSV(小さく、1行ずつストリーム処理しやすい)。
  • Web APIのリクエストとレスポンス:JSON。
  • レコードの中にリストを持つ階層データ:JSON。
  • 数値、真偽値、nullを区別する必要がある場合:JSON(CSVではすべてテキスト)。

カンマと引用符:CSVのエスケープ規則

値にカンマが含まれていたらどうするか。RFC 4180では、ダブルクォートで囲むと定めています。例:"Tokyo, Japan"。値の中のダブルクォートは2つ重ねてエスケープするので、He said "hi" は "He said ""hi""" になります。引用符で囲めば、値の中の改行も許されます。

単に split(',') を呼ぶだけのコードはこれらの規則を無視するため、住所や備考の列が出てきた途端に列がずれます。CSVは必ず標準に従ったパーサーや変換ツールで処理しましょう。

Excelで日本語が文字化けする理由

WindowsのExcelでUTF-8のCSVをダブルクリックすると、日本語やアクセント付きの文字が化けることがよくあります。UTF-8のバイトオーダーマーク(BOM)がないと、Excelは推測に頼り、システムの従来の文字コード(Shift_JISなど)で読み込んでしまうからです。

ファイルをBOM付きUTF-8で保存するか、Excelの「データ」→「テキストまたはCSVから」を使ってUTF-8を明示的に選びましょう。逆に、プログラムでBOM付きのファイルを読むときは、最初の列名の前に見えない文字が付いていないか確認してください。

入れ子のJSONをCSVに平らにする

ツリーを表に変えるには取り決めが必要です。よく使われるのはパスをドットでつなぐ方法で、{"user": {"name": "Kim"}} は user.name という列になります。

配列はさらに厄介です。注文に商品が3つある場合、3行に分けるか、商品を1つの列にJSON文字列として保存するかを選べます。分析には行を増やす方法が、元データの保持にはJSON文字列の列が向いています。

変換前のチェックリスト

AIBIZAPのCSV ↔ JSON変換ツールで変換し、JSONフォーマッターで構造を確認すれば、ミスを早めに見つけられます。

  • 1行目がヘッダーで、区切り文字が本当にカンマか確認する(セミコロンやタブもよくある)。
  • 先頭の0に意味があるコード値は文字列のまま扱う。
  • セルの前後の空白や空行を先に取り除く。空白除去ツールが便利。
  • 変換後の行数が元と一致するか確認する。一致しなければ、たいてい引用符か改行の問題。

このツールで試してみましょう

その他のガイド

すべてのガイド