外部 API やデータエクスポートで CSV を受け取り、そのまま別のシステムに JSON で投入する、という場面は意外と多い。
この記事では、CSV → JSON 変換の方法と、jq で加工するパイプラインを紹介する。
CSV → JSON 変換の方法
方法 1: csvjson(csvkit)
Python ベースの CSV ツール群 csvkit に含まれる csvjson コマンド。
pip install csvkit
csvjson users.csv
出力:
[
{"name": "田中太郎", "email": "tanaka@example.com", "role": "admin"},
{"name": "佐藤花子", "email": "sato@example.com", "role": "editor"}
]
1 行目をヘッダーとして認識し、各行をオブジェクトに変換する。
方法 2: Miller(mlr)
mlr(Miller)は CSV / JSON / TSV を相互変換できるツール。
mlr --icsv --ojson cat users.csv
フィルタリングや集計もコマンドラインでできるので、CSV の前処理が多い場合に便利。
方法 3: ブラウザで変換する
CSV ファイルをエディタで開いてコピーし、ブラウザのツールに貼る方法。コマンドラインを使わない人と共有するとき向き。
FormatArc の CSV to JSON ツール は 1 行目をヘッダーとして自動認識し、JSON 配列に変換する。データはブラウザ内で処理されるので、社内データを貼っても外部に出ない。
jq で加工するパイプライン
CSV を JSON に変換した後、jq で必要なフィールドだけ取り出したり、形式を変えたりできる。
特定のフィールドだけ抽出
csvjson users.csv | jq '.[].name'
"田中太郎"
"佐藤花子"
フィルタリング
csvjson users.csv | jq '[.[] | select(.role == "admin")]'
[
{
"name": "田中太郎",
"email": "tanaka@example.com",
"role": "admin"
}
]
形式を変換(配列 → オブジェクト)
email をキーにしたオブジェクトに変換する例:
csvjson users.csv | jq 'map({(.email): .name}) | add'
{
"tanaka@example.com": "田中太郎",
"sato@example.com": "佐藤花子"
}
実践: API レスポンスの CSV をそのまま加工
# 1. CSV をダウンロード
curl -s https://api.example.com/export/users.csv -o users.csv
# 2. JSON に変換してフィルタ
csvjson users.csv | jq '[.[] | select(.role == "admin") | {name, email}]'
# 3. そのまま別の API に POST
csvjson users.csv \
| jq '[.[] | select(.role == "admin")]' \
| curl -X POST -H "Content-Type: application/json" -d @- https://api.example.com/import
このように CSV → JSON → jq → API というパイプラインを組むと、手作業のデータ加工が減る。
使い分け
| ツール | 向いている場面 |
|---|---|
| csvjson(csvkit) | Python 環境がある。シンプルな変換 |
| mlr(Miller) | CSV の前処理が多い。集計もしたい |
| ブラウザツール | 非エンジニアと共有。目視確認 |
コマンドラインで完結させたい場合は csvjson + jq、ブラウザで確認したい場合は FormatArc がおすすめ。
まとめ
- CSV → JSON 変換は
csvjsonかmlrが定番 - 変換後に
jqでフィルタ・整形するパイプラインが便利 - ブラウザでの確認用には FormatArc(https://formatarc.com/ja/csv-to-json/)がサーバー送信なしで安心