🐍 如何使用 Python 將 JSON 轉換為 CSV:完整教學與程式碼範例
在日常資料處理中,我們經常會遇到需要把 JSON 格式資料轉換為 CSV 表格 的場景,比如匯出介面資料、分析日誌檔案、或匯入 Excel 進行視覺化。
本文將介紹如何使用 Python 高效地完成 JSON → CSV 的轉換,並給出幾種常見的實作方式。
📘 一、JSON 與 CSV 的差異
| 特性 | JSON | CSV |
|---|---|---|
| 資料結構 | 樹狀、巢狀結構 | 平面表格 |
| 可讀性 | 機器與人類皆可讀 | 人類易讀、結構簡單 |
| 常用場景 | Web 介面、API、設定檔 | Excel、資料庫匯入匯出 |
| 典型檔案副檔名 | .json | .csv |
當你想在電子試算表中檢視或分析介面回傳的 JSON 資料時,就需要將其轉換為 CSV。
⚙️ 二、使用 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)
# 寫入表頭(從第一個元素的 key 提取)
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🧩 三、處理巢狀(Nested)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。🚀 四、從 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")🧠 五、常見問題(FAQ)
1️⃣ 檔案亂碼怎麼辦?→ 使用 encoding='utf-8-sig' 儲存 CSV,確保 Excel 開啟正常顯示中文。
→ 如果 JSON 是單物件(如 {}),可手動包一層陣列,例如:
data = [data]3️⃣ 如何匯入 Excel?
→ 在 Excel 中點選「資料」→「自文字/CSV」→ 選擇輸出檔案即可。
🧰 六、完整專案範例
如果你需要一個命令列工具,可以寫成:
# 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🧭 七、總結
| 工具 | 適用場景 | 優點 |
|---|---|---|
csv + json | 簡單 JSON | 標準函式庫、零相依性 |
pandas | 巢狀 JSON、大檔案 | 功能強大、支援批次處理 |
requests | 網路資料 | 可直接抓取 API |
如果你只是偶爾轉換,可以使用線上工具 👉 JsonWork.com/json-to-csv
無需安裝 Python,支援 貼上 / 上傳 / 下載,100% 本地處理,更安全便捷。
發布於 2025年10月5日