MENU

JSONをCSVに変換する方法|手動とツールでのやり方を比較

JSONをCSVに変換する方法|手動とツールでのやり方を比較

JSONをCSVに変換したい場面では、まず 「1回だけ少量を直したいのか」「今後も繰り返し処理するのか」 を決めるのが近道です。少量なら手動でも済みますが、APIレスポンスやログのように件数が増えると、jq や Python、Excel の Power Query を使ったほうが速くてミスも減ります。

この記事では、JSONをCSVにする代表的な4パターンを比較しながら、入力例と出力例つきで整理します。対象は、JSONの中身は読めるけれど、CSV化のやり方で止まりやすい初心者から実務初級者です。

  • 少量の単純なJSON: 手動で列を決めてCSV化してもよい
  • 繰り返し処理: Pythonかjqが向く
  • コードを書きたくない: Excelの Power Query が扱いやすい
  • 注意点: 入れ子構造、配列、文字コード、改行を先に確認する

ここがポイント: JSONをCSVに変換するときは、変換そのものよりも「どのキーを列にするか」と「入れ子をどう平坦化するか」で結果が決まります。

目次

まず押さえたい前提

JSONとCSVは、見た目以上に得意分野が違います。

JSONは階層構造を持てるので、オブジェクトの中に配列や別のオブジェクトを入れられます。一方、CSVは1行1レコード、1列1値の表形式です。つまり、入れ子のあるJSONは、そのままではCSVにきれいに収まりません。

たとえば次のJSONを見てください。

[
  {
    "id": 1,
    "name": "Tanaka",
    "email": "tanaka@example.com",
    "department": {
      "name": "Sales",
      "code": "S01"
    }
  },
  {
    "id": 2,
    "name": "Sato",
    "email": "sato@example.com",
    "department": {
      "name": "Support",
      "code": "C03"
    }
  }
]

この場合、CSVでは次のように列を決めるのが実務的です。

id,name,email,department_name,department_code
1,Tanaka,tanaka@example.com,Sales,S01
2,Sato,sato@example.com,Support,C03

この「department.namedepartment_name にする」といった平坦化が、JSONからCSV変換の本題です。

方法の比較

先に結論を表で整理します。

方法 向いている場面 難易度 強み 弱み
手動 数件だけ、1回だけ すぐ始められる 件数が増えると破綻しやすい
Excel Power Query コードなしで整形したい 低〜中 GUIで展開しやすい 複雑なネストは調整が必要
jq CLIで素早く変換したい 軽い、再利用しやすい フィルタに慣れが必要
Python 業務処理に組み込みたい 柔軟性が高い スクリプトを書く必要がある

手動でJSONをCSVに変換するやり方

少量データなら、手動でも十分です。ただし、配列の中に配列があるJSON や、項目ごとにキーが揺れるJSONではすぐつらくなります。

手動で済むケース

  • 10件前後の小さなJSON
  • キーが毎行ほぼ同じ
  • 一度きりの提出用データ
  • スクリプトやCLIを使えないPC

手動の流れ

  1. JSONを整形表示する
  2. 1行ごとに必要なキーを決める
  3. 列名を先に決める
  4. 値を表計算ソフトへ貼り付ける
  5. CSV形式で保存する

手動でやるときのコツ

  • 列名はJSONのキー名そのままではなく、department_name のように平坦化後を意識して付ける
  • カンマ、改行、ダブルクォートを含む値はCSVで崩れやすいので注意する
  • null を空欄にするのか、null の文字で残すのかを先に決める

手動方式の欠点は、同じ作業をもう一度やると再現しづらいことです。APIの定期取得や毎月のレポートには向きません。

ExcelのPower Queryで変換する方法

コードを書かずに進めたいなら、Excelの Power Query が扱いやすい選択肢です。Microsoft Learn では JSON コネクタで読み込んだあと、Power Query エディタで表に展開できると案内されています。

向いている場面

  • Windows環境でExcelを使っている
  • GUIで確認しながら列を増減したい
  • 社内メンバーと手順を共有したい

基本手順

  1. Excelで データ から JSON ファイルを読み込む
  2. Power Query エディタでレコードやリストを展開する
  3. 不要列を削除する
  4. 列名を整える
  5. シートへ読み込んでCSV保存する

どこが便利か

Microsoft Learn の JSON コネクタ資料では、Power Query が JSON から表を自動検出して平坦化を補助すると説明されています。つまり、単純な入れ子ならコードなしでもかなり進めやすい、ということです。

一方で、次のようなJSONは手直しが増えます。

  • 配列の中に別の配列がある
  • レコードごとにキーが違う
  • JSON Lines形式になっている

Microsoft Learn でも、JSON Lines はそのままでは読み込みにくく、追加の変換が必要なケースが示されています。ログ系データを扱うなら、この点は先に確認したほうが安全です。

jqでJSONをCSVに変換する方法

ターミナルが使えるなら、jq はかなり実用的です。jq の公式マニュアルでは、@csv は「入力が配列であること」を前提にCSVとして出力すると説明されています。

最小構成の例

入力ファイル users.json:

[
  {"id":1,"name":"Tanaka","email":"tanaka@example.com"},
  {"id":2,"name":"Sato","email":"sato@example.com"}
]

コマンド:

jq -r '(["id","name","email"]), (.[] | [.id, .name, .email]) | @csv' users.json > users.csv

出力:

"id","name","email"
1,"Tanaka","tanaka@example.com"
2,"Sato","sato@example.com"

入れ子を平坦化する例

jq -r '(["id","name","department_name","department_code"]), (.[] | [.id, .name, .department.name, .department.code]) | @csv' users.json > users.csv

jqが向いている理由

  • サーバーや開発PCでそのまま使いやすい
  • ワンライナーで再実行できる
  • CIやシェルスクリプトに組み込みやすい

jqで詰まりやすい点

  • @csv は配列が必要なので、オブジェクトをそのまま渡すと失敗しやすい
  • キーが存在しないと null が混ざる
  • 深い配列は1行に落とし込むルールを自分で決める必要がある

たとえば tags: ["red", "blue"] のような配列は、そのままCSVの1列にするなら join("|") のように結合方針を決めておくと扱いやすくなります。

PythonでJSONをCSVに変換する方法

業務で何度も使うなら、最終的にはPythonがいちばん融通が利きます。Python標準ライブラリの json モジュールでJSONを読み込み、csv モジュールでCSVを書き出せます。

この記事の例は、Python 3系の標準ライブラリを前提にしています。公式ドキュメントでは、csv 書き込み時に newline='' を指定すること、必要に応じて encoding を明示することが案内されています。

最小例

import json
import csv

with open("users.json", "r", encoding="utf-8") as f:
    data = json.load(f)

with open("users.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["id", "name", "email"])
    writer.writeheader()
    writer.writerows(data)

入れ子に対応する例

import json
import csv

with open("users.json", "r", encoding="utf-8") as f:
    data = json.load(f)

rows = []
for item in data:
    rows.append({
        "id": item.get("id"),
        "name": item.get("name"),
        "email": item.get("email"),
        "department_name": item.get("department", {}).get("name"),
        "department_code": item.get("department", {}).get("code"),
    })

with open("users.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(
        f,
        fieldnames=["id", "name", "email", "department_name", "department_code"]
    )
    writer.writeheader()
    writer.writerows(rows)

出力:

id,name,email,department_name,department_code
1,Tanaka,tanaka@example.com,Sales,S01
2,Sato,sato@example.com,Support,C03

Pythonを選ぶべきケース

  • 定期処理にしたい
  • 変換前に条件分岐や値の補正を入れたい
  • API取得からCSV保存まで一連で自動化したい
  • エラー処理を入れたい

実務でよくある失敗

変換処理そのものより、データの形で失敗することが多いです。

1. キーが行ごとに違う

JSONでは、ある行にだけ phone があり、別の行にはないことがあります。この場合は以下のどちらかを先に決めます。

  • 欠けたキーは空欄で出す
  • 必須キーが欠けた行は除外する

2. 配列をどう1列に入れるか決めていない

roles: ["admin", "editor"] のような配列は、そのままCSVの1セルには収まりません。

対処例:

  • admin|editor のように区切り文字で結合する
  • 行を分割して1役割ずつ出す
  • 配列列はJSON文字列のまま保持する

3. 文字コードでExcel表示が崩れる

UTF-8のCSVは環境によって文字化けに見えることがあります。日本語データをExcel中心で使うなら、開き方まで含めて確認したほうが安全です。

4. 改行やカンマを含む値で列ずれする

CSVは単純に見えて、実際にはクォート処理が重要です。Pythonの csvjq@csv を使うと、この部分を任せやすくなります。逆に手作業で貼り替えると、ここで崩れやすいです。

5. JSONが配列ではなく単一オブジェクトだった

JSONファイルが次のように1件だけのオブジェクトだと、配列前提のスクリプトはそのまま動きません。

{"id":1,"name":"Tanaka","email":"tanaka@example.com"}

その場合は、配列に包むか、単一オブジェクト用の処理に分けます。

どの方法を選ぶべきか

迷ったら、次の基準で決めると外しにくいです。

手動が向く人

  • 今回だけ処理すればよい
  • 件数が少ない
  • JSONの構造が浅い

Excel Power Queryが向く人

  • コードを書きたくない
  • 表を見ながら列を調整したい
  • 社内の標準ツールがExcel

jqが向く人

  • CLIに抵抗がない
  • Linux、macOS、WSL環境で作業している
  • ワンライナーで素早く処理したい

Pythonが向く人

  • 毎回同じ処理を回したい
  • 例外処理や加工もまとめたい
  • 将来はAPI連携や自動化まで広げたい

代替手段と使い分け

JSONからCSVへ変換する手段は、今回紹介したものだけではありません。オンライン変換ツールもありますが、業務データでは扱いに注意が必要です。

  • 公開APIのサンプルやダミーデータなら試しやすい
  • 個人情報、顧客情報、社内データは外部アップロードを避ける
  • 再現性が必要なら、GUIよりスクリプトやCLIのほうが残しやすい

セキュリティと再実行性を考えると、実務では Power Query、jq、Pythonのいずれか に寄せたほうが管理しやすい場面が多いです。

まとめ

JSONをCSVに変換する方法は複数ありますが、選び方はシンプルです。

  • 少量を一度だけ なら手動
  • コードなしで進めたい ならExcel Power Query
  • 軽く速く回したい ならjq
  • 業務フローに組み込みたい ならPython

次に見るべきポイントは、変換ツールそのものより 自分のJSONに配列や入れ子がどの程度あるか です。そこを先に確認すると、後から列設計をやり直す手間がかなり減ります。

参照リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次