CSVからJSONへの変換ツール
CSVデータをJSON配列またはオブジェクト形式に変換
CSVからJSONへの変換とは?
CSV(Comma-Separated Values)は、各行がデータレコードを表し、レコード内のフィールドが区切り文字(通常はカンマ)で区切られたプレーンテキストの表形式フォーマットです。CSVはパーソナルコンピューティングの黎明期から標準的なデータ交換フォーマットとして使われており、RFC 4180で正式化されています。スプレッドシート・データベース・データエクスポートツールはいずれもCSVを出力します。シンプルでコンパクトなため、ほぼすべてのプログラミング言語で読み込めます。
JSON(JavaScript Object Notation)は、構造化データをキーと値のペアおよび順序付き配列として表現します。CSVと異なり、JSONはネストされたオブジェクト・型付き値(数値・真偽値・null)・可変長レコードをサポートします。JSONはJavaScriptエンジンにネイティブで認識されるため、ブラウザとサーバー間のデータ交換およびREST APIレスポンスにおける主要フォーマットです。これらの特性から、JSONはWeb API・設定ファイル・MongoDBやCouchDBなどのNoSQLデータベースのデファクトフォーマットとなっています。
CSVからJSONへの変換とは、表の各行をJSONオブジェクトにマッピングし、ヘッダー行をプロパティ名、セルの値をプロパティ値として使う処理です。結果は通常、JSONオブジェクトの配列になります。REST API・フロントエンドのデータテーブルコンポーネント・ドキュメント指向データベースなど、構造化されたJSONを入力として期待するシステムにフラットな表形式データを渡す必要がある場合に、この変換が必要になります。
このツールを使う理由
このコンバーターはブラウザ上でCSVを解析し、JSON出力を即座に生成します。データがサーバーに送信されることはありません。
CSVからJSONへの変換ユースケース
CSV区切り文字リファレンス
CSVファイルは常にカンマを使うわけではありません。区切り文字はロケール・エクスポートアプリケーション・データの内容によって異なります。最も一般的な4種類の区切り文字と、それぞれの典型的な使用場面を紹介します:
| 区切り文字 | 標準 | 拡張子 | 備考 |
|---|---|---|---|
| Comma (,) | RFC 4180 default | .csv | Most common; Excel default export |
| Tab (\t) | TSV variant | .tsv | Avoids quoting fields that contain commas |
| Semicolon (;) | European locale CSV | .csv | Used where comma is the decimal separator (DE, FR, BR) |
| Pipe (|) | Fixed-width alternative | .csv | Rare in field values, good for messy data |
CSVとJSON:構造上の違い
2つのフォーマットのギャップが、変換時にヘッダーマッピング・型推論・欠損値の扱いを明示的に決定する必要がある理由です。
コード例
主要言語とCLIツールでCSVをJSONにプログラム的に変換する方法:
// Simple CSV string → JSON array
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`
const [headerLine, ...rows] = csv.trim().split('\n')
const headers = headerLine.split(',')
const json = rows.map(row => {
const values = row.split(',')
return Object.fromEntries(headers.map((h, i) => [h, values[i]]))
})
// → [{ name: "Alice", age: "30", city: "Berlin" }, ...]
// With the built-in fetch + a library (Papa Parse)
import Papa from 'papaparse'
const result = Papa.parse(csvString, { header: true, dynamicTyping: true })
console.log(result.data) // typed numbers and booleansimport csv, json, io
csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""
reader = csv.DictReader(io.StringIO(csv_string))
data = [row for row in reader]
print(json.dumps(data, indent=2))
# → [{"name": "Alice", "age": "30", "city": "Berlin"}, ...]
# With type coercion (age as int)
import pandas as pd
df = pd.read_csv(io.StringIO(csv_string))
print(df.to_json(orient="records", indent=2))
# → [{"name": "Alice", "age": 30, "city": "Berlin"}, ...]package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"strings"
)
func main() {
input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
r := csv.NewReader(strings.NewReader(input))
records, _ := r.ReadAll()
headers := records[0]
var result []map[string]string
for _, row := range records[1:] {
obj := make(map[string]string)
for i, h := range headers {
obj[h] = row[i]
}
result = append(result, obj)
}
out, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(out))
// → [{"age":"30","city":"Berlin","name":"Alice"}, ...]
}# Using Miller (mlr) — handles quoting, types, and edge cases
mlr --icsv --ojson cat data.csv
# → [{"name": "Alice", "age": 30, "city": "Berlin"}, ...]
# Using csvjson from csvkit (Python-based)
csvjson data.csv
# Using jq with @csv (reverse: JSON → CSV)
# For CSV → JSON, pipe through Miller or Python
cat data.csv | python3 -c "
import csv, json, sys
reader = csv.DictReader(sys.stdin)
json.dump(list(reader), sys.stdout, indent=2)
"