JSON ↔ CSV 相互変換と Excel の文字化け対策(BOM・ネスト平坦化)
JSON CSV Excel JavaScript Python
Web API のレスポンス(JSONデータ)を Excel や Google スプレッドシートで分析するための CSV 相互変換テクニックと、JSON↔CSV変換ツール を活用した文字化け回避方法です。
2. Excel で開いた際の文字化け原因と解決策(UTF-8 BOM)
理由
Windows版 Excel で UTF-8 の CSV ファイルを直接ダブルクリックして開くと、Excel はデフォルトで Shift_JIS として読み込もうとするため日本語が完全に文字化けします。
解決策:ファイル頭に UTF-8 BOM (\uFEFF) を挿入する
CSVファイルの先頭3バイトに Byte Order Mark (BOM) EF BB BF を付与することで、Excel が自動的に UTF-8 として認識します。
// JavaScript (Node.js / ブラウザ) での BOM 付き CSV 生成
function downloadCsvForExcel(csvString, filename = "data.csv") {
// UTF-8 BOM (\uFEFF) を先頭に付加
const bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
const blob = new Blob([bom, csvString], { type: "text/csv;charset=utf-8;" });
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = filename;
link.click();
}
3. ネストされた(階層構造のある)JSON の平坦化 (Flatten)
ネストされたオブジェクトや配列が含まれる JSON は、そのままでは CSV の列に展開できません。
// ネストされた JSON
[
{ "id": 1, "user": { "name": "Taro", "age": 25 } }
]
ドット記法(user.name, user.age)で平坦化(Flatten)してから CSV 化します。
Python (Pandas) での爆速変換
import pandas as pd
import json
json_data = [
{"id": 1, "user": {"name": "Taro", "age": 25}},
{"id": 2, "user": {"name": "Hanako", "age": 30}}
]
# json_normalize でネストを列に全展開
df = pd.json_normalize(json_data)
# 画面出力: id, user.name, user.age の列ができる
# UTF-8 BOM 付きで CSV 保存
df.to_csv('output_excel.csv', index=False, encoding='utf_8_sig')