在工作中使用 Elasticsearch 時,我們常會透過 Elasticdump 工具,把索引資料匯出成 JSON 檔案。不過,若想將這些資料轉成 Excel 可讀的 CSV 格式,而且還要支援繁體中文,就需要多一些處理技巧。
這篇文章會一步步帶你從 JSON 轉成 UTF-8 編碼(含 BOM)的 CSV 檔,讓你可以直接在 Excel 開啟時看到正確的繁體中文內容。
為什麼會需要這個轉換?
雖然 JSON 結構在程式邏輯處理上很方便,但很多非技術人員習慣用 Excel 檢視與整理資料,這時就會需要 CSV 格式的檔案。
Elasticdump 匯出後是 NDJSON 格式(每行一筆 JSON 物件),如果直接用文字編輯器或簡單工具轉成 CSV,常會遇到這些問題:
- 資料巢狀結構無法展開
- 中文亂碼
- 欄位不一致或多餘欄位
使用 Python + Pandas 解決問題
安裝必要套件
如果你還沒安裝 pandas,可以先透過 pip 安裝:
pip install pandas
程式碼範例
這是一段完整的範例程式碼,能將 Elasticdump 匯出的 JSON 轉換為繁體中文的 CSV:
import pandas as pd
import json
# 讀取 Elasticdump 匯出的 NDJSON 檔
with open('elasticdump_output.json', 'r', encoding='utf-8') as f:
data = [json.loads(line) for line in f]
# 假設資料都在 _source 欄位,取出來
source_data = [doc['_source'] for doc in data]
# 轉成 pandas DataFrame
df = pd.DataFrame(source_data)
# 儲存為 CSV(utf-8-sig 編碼,避免中文亂碼)
df.to_csv('output.csv', index=False, encoding='utf-8-sig')
實際 JSON 資料範例
假設你匯出的檔案內容如下:
{"_index":"test","_type":"_doc","_id":"1","_source":{"姓名":"張三","年齡":28,"城市":"台北"}}
{"_index":"test","_type":"_doc","_id":"2","_source":{"姓名":"李四","年齡":35,"城市":"高雄"}}
轉換後會得到這樣的 CSV 檔案內容:
姓名,年齡,城市
張三,28,台北
李四,35,高雄
打開後繁體中文完全正常顯示!
使用 utf-8-sig
解決 Excel 中文亂碼
這是一個很多人會忽略的細節:如果你使用的是 Windows + Excel,請一定要用 utf-8-sig
編碼儲存 CSV。
不然打開檔案時,中文欄位很容易變亂碼或顯示為亂七八糟的字元。
只要透過 Python + Pandas 這樣簡單的組合,就能快速將 Elasticdump 匯出的 JSON 檔轉換為適合 Excel 編輯的繁體中文 CSV 檔。如果你在轉換的過程中遇到不同格式的 JSON 或欄位處理問題,歡迎留言或私訊我,我可以協助你進一步調整解析邏輯。