🐍 PythonでJSONをCSVに変換する方法:完全チュートリアルとコード例
日常のデータ処理において、JSON形式のデータをCSVテーブルに変換する必要がある場面によく遭遇します。APIデータのエクスポート、ログファイルの分析、Excelでの可視化などです。
この記事では、Pythonを使用してJSON → CSVの変換を効率的に行う方法を紹介し、いくつかの一般的な実装方法を示します。
📘 1. JSONとCSVの主な違い
| 特徴 | JSON | CSV |
|---|---|---|
| データ構造 | ツリー状、ネスト構造 | フラットなテーブル |
| 可読性 | 機械と人間の両方が読める | 人間にとって読みやすく、構造がシンプル |
| 一般的な用途 | Web API、設定ファイル | Excel、データベースのインポート/エクスポート |
| ファイル拡張子 | .json | .csv |
APIから返されたJSONデータをスプレッドシートで表示または分析したい場合は、CSVに変換する必要があります。
⚙️ 2. Pythonの標準ライブラリを使用したJSONからCSVへの変換
Pythonには強力なjsonとcsv標準ライブラリが付属しており、追加の依存関係なしで直接変換を処理できます。
例1:基本版(フラットJSON構造)
import json
import csv
# JSONファイルを読み込み
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# CSVファイルを書き込み用に開く
with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
# ヘッダーを書き込み(最初の要素のキーから抽出)
header = data[0].keys()
writer.writerow(header)
# 各行のデータを書き込み
for row in data:
writer.writerow(row.values())
print("✅ JSONがCSVに正常に変換されました:output.csv")入力例:[
{"name": "Alice", "age": 25, "city": "Shanghai"},
{"name": "Bob", "age": 30, "city": "Beijing"}
]出力結果(CSV):name,age,city
Alice,25,Shanghai
Bob,30,Beijing🧩 3. ネストされたJSONの処理
JSONにネストされたオブジェクトや配列が含まれている場合は、まず構造を「展開」する必要があります。
例2:pandas.json_normalize()を使用
import pandas as pd
import json
# ネストされたJSONを読み込み
with open('nested.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# ネストされた構造をフラットなテーブルに展開
df = pd.json_normalize(data)
# CSVにエクスポート
df.to_csv('output.csv', index=False, encoding='utf-8-sig')
print("✅ ネストされたJSONがCSVに正常に変換されました:output.csv")入力例:[
{
"user": {"name": "Alice", "id": 101},
"stats": {"score": 98, "level": 3}
},
{
"user": {"name": "Bob", "id": 102},
"stats": {"score": 87, "level": 2}
}
]出力結果:user.name,user.id,stats.score,stats.level
Alice,101,98,3
Bob,102,87,2✅ ヒント:pandas.json_normalize()はネストされたフィールドを自動的にフラット化するため、複雑なJSONに最適です。🚀 4. URLからJSONを読み込んでCSVにエクスポート
リモートAPIから直接JSONデータを読み込むこともできます:
import requests
import pandas as pd
url = "https://jsonplaceholder.typicode.com/users"
data = requests.get(url).json()
df = pd.json_normalize(data)
df.to_csv('users.csv', index=False, encoding='utf-8-sig')
print("✅ URLからJSONを読み込み、CSVにエクスポートしました")🧠 5. よくある質問(FAQ)
1️⃣ ファイルの文字化けはどうすれば?→ CSVを保存する際にencoding='utf-8-sig'を使用し、Excelで正常に中国語が表示されるようにします。
→ JSONが単一オブジェクト({}など)の場合は、手動で配列で包むことができます:
data = [data]3️⃣ Excelにインポートするには?
→ Excelで「データ」→「テキスト/CSVから」→ 出力ファイルを選択します。
🧰 6. 完全なプロジェクト例
コマンドラインツールが必要な場合:
# json2csv.py
import sys
import pandas as pd
def json_to_csv(input_file, output_file):
df = pd.read_json(input_file)
df.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f"✅ {input_file}が{output_file}に変換されました")
if __name__ == "__main__":
if len(sys.argv) != 3:
print("使用方法: python json2csv.py input.json output.csv")
else:
json_to_csv(sys.argv[1], sys.argv[2])実行:
python json2csv.py data.json output.csv🧭 7. まとめ
| ツール | 使用ケース | 利点 |
|---|---|---|
csv + json | シンプルなJSON | 標準ライブラリ、ゼロ依存 |
pandas | ネストされたJSON、大きなファイル | 強力な機能、バッチ処理サポート |
requests | ネットワークデータ | 直接API取得 |
たまに変換するだけの場合は、オンラインツール 👉 JsonWork.com/json-to-csv をご利用ください。
Pythonのインストール不要、貼り付け / アップロード / ダウンロードをサポート、100%ローカル処理でより安全で便利です。
2025年10月5日公開