我編寫的第一個 JSON 到 CSV 轉換器持續了三天的生產。
這是一個"匯出到電子表格" Laravel 管理面板中的按鈕,我的轉換邏輯是 - I'我對此並不感到自豪 - values.join(",").它順利通過了測試。然後,一位用戶匯出了一份客戶列表,其中一家公司被命名為 "史密斯、瓊斯&合作夥伴,"以及將位置向右移動一個位置後的每一列。在有人注意到電子郵件欄中有電話號碼之前,他們的會計師匯入了 340 行未對齊的資料。
CSV 中的逗號是 't 一個分隔符,您可以用字串連接。 It's 語法,定義於 RFC 4180,具有實際的轉義規則。這個錯誤就是原因 JSON 到 CSV 轉換器 後來我為 toolz。dev 構建了將逃跑視為不可協商的內容 - 以及為什麼本指南將即時時間花在邊緣案例上,而不僅僅是快樂的道路上。
以下是我實際使用的五種方法,每一種方法獲勝的時間,以及每一種方法咬的地方。
TL;DR: 對於一次性轉換,請將 JSON 貼上到 toolz。dev JSON 到 CSV 轉換器- 它透過點符號壓平嵌套對象,根據 RFC 4180 正確轉義,並在瀏覽器中 100% 運行。對於重複出現的作業,請編寫腳本:
pd.json_normalize()在python或json2csv節點中的包。用驗證 json 格式化程式 首先,保持原有的JSON-CSV平整是單向的。
為什麼您已經擁有 JSON 時需要 CSV?
因為需要您資料的人會住在您的終端中。每個轉換請求 I'曾經得到的情況簡化為五種情況之一:
分析師從事電子表格工作。 Excel、Google Sheets、Tableau、Power BI - 它們都本地吸入 CSV 並阻塞嵌套的 JSON。將 API 輸出轉換為 CSV 是工程資料到達業務端的方式。
資料庫批量導入平面檔案。 PostgreSQL's COPY 還有 MySQL's LOAD DATA 想要表格輸入。 JSON 列存在,但載入到真實的關係表中意味著先展平。
移民需要通用語言。 在 NoSQL 儲存和關聯式儲存之間或兩個 SaaS 平台之間移動數據,CSV 是兩端都能可靠理解的格式。
合規性喜歡平面文件。 一些檔案要求指定了人類可讀的格式。 CSV 可以開啟任何內容,幾十年後。
利害關係人可以'閱讀 JSON。 產品經理詢問"我可以把它當作電子表格嗎?"是最常見的觸發器。這是我損壞的匯出按鈕的觸發器。

是什麼讓 JSON 到 CSV 的轉換變得困難?
平面 JSON 沒什麼大不了的。這:
[
{"id": 1, "name": "Alice", "email": "[email protected]", "age": 30},
{"id": 2, "name": "Bob", "email": "[email protected]", "age": 25}
]
就變成這樣,標題的鍵,行的元素:
id,name,email,age
1,Alice,[email protected],30
2,Bob,[email protected],25
但真正的 API 回應從來都不是平淡的。它們看起來像這樣:
[
{
"id": 1,
"name": "Alice",
"address": {"street": "123 Main St", "city": "San Francisco", "state": "CA"},
"skills": ["JavaScript", "Python", "Go"]
}
]
CSV沒有"的概念;內部。"所以你選擇一個扁平化策略,每個策略都有一個成本:
點符號扁平化- 嵌套鍵變成複合標頭:
id,name,address.street,address.city,address.state,skills
1,Alice,123 Main St,San Francisco,CA,"JavaScript; Python; Go"
數組的索引列- skills.0, skills.1, skills.2. 可預測,但包含 14 項技能的記錄可以為每個人產生 14 個欄位。
JSON 編碼的細胞- 將原始 JSON 填入單元格中,雙引號。無損、無法讀取,這讓分析師感到悲傷。
帶有連接數組的點符號是人類消費的正確預設值 - it'這是什麼 toolz。dev 轉換器 產生。當下游程式碼需要每個元素可尋址時,索引列獲勝。 JSON-in-cells 是往返的最後手段。
方法一:如何將JSON轉換為CSV Online?
最適合: 一次性轉換,非開發人員,任何低於幾十 MB 的內容。
- 打開 JSON 到 CSV 轉換器.
- 貼上您的 JSON - 一系列物件或單一物件。
- 該工具檢測結構,將嵌套物件展平為點符號,並立即渲染 CSV。
- 複製它,或下載
.csv.
我在任何非重複出現的腳本上預設執行此操作的原因:零設定、正確的 RFC 4180 轉義(學到了該課程)、跨不一致物件的自動金鑰統一,以及 - 因為它'客戶端 - 充滿您剛剛貼上的客戶電子郵件的 API 回應永遠不會離開您的電腦。如果您不這樣做,請觀看網路標籤;相信我;那'這是我應用於每個線上轉換器的測試,但大多數都失敗了。
其中'是錯誤的工具:反覆轉換(編寫它)和深層病態嵌套,其中你'會想要手工挑選扁平化策略。

方法 2:如何在 JavaScript 中將 JSON 轉換為 CSV?
最適合: 建立管道、節點服務、自訂轉換邏輯。
這裡'是最小的正確版本 - 注意逃跑,這是我三天災難跳過的部分:
function jsonToCsv(jsonArray) {
if (!jsonArray.length) return "";
const headers = Object.keys(jsonArray[0]);
const csvRows = [
headers.join(","),
...jsonArray.map(row =>
headers.map(header => {
const value = row[header] ?? "";
// RFC 4180: double embedded quotes, wrap anything containing , " or newline
const escaped = String(value).replace(/"/g, '""');
return /[,"\n\r]/.test(escaped) ? `"${escaped}"` : escaped;
}).join(",")
)
];
return csvRows.join("\n");
}
對於嵌套輸入,首先平整並聯合鍵 - 僅從第一個物件取得標頭是手動滾動轉換器中第二常見的錯誤:
function flattenObject(obj, prefix = "") {
const result = {};
for (const [key, value] of Object.entries(obj)) {
const newKey = prefix ? `${prefix}.${key}` : key;
if (value && typeof value === "object" && !Array.isArray(value)) {
Object.assign(result, flattenObject(value, newKey));
} else if (Array.isArray(value)) {
result[newKey] = value.join("; ");
} else {
result[newKey] = value;
}
}
return result;
}
function nestedJsonToCsv(jsonArray) {
const flattened = jsonArray.map(item => flattenObject(item));
// Union of ALL keys, not just the first object's
const headers = [...new Set(flattened.flatMap(Object.keys))];
// ...then emit rows exactly as in jsonToCsv above
}
或跳過手捲 - json2csv package 多年來一直處理這些邊緣:
import { Parser } from "json2csv";
const parser = new Parser({ flatten: true });
const csv = parser.parse(data);
方法 3:如何在 Python 中將 JSON 轉換為 CSV?
最適合: 數據科學工作流程,任何已經觸及熊貓的東西。
大熊貓單襯覆蓋平面 JSON:
import pandas as pd
df = pd.read_json("data.json")
df.to_csv("output.csv", index=False)
真正有用的函數是 pd.json_normalize()- 專為嵌套 API 回應而建置:
import pandas as pd
import requests
response = requests.get("https://api.example.com/users")
df = pd.json_normalize(response.json())
print(df.columns.tolist())
# ['id', 'name', 'skills', 'address.street', 'address.city', 'address.state']
# Arrays still need a decision — join them explicitly:
df["skills"] = df["skills"].apply(lambda x: "; ".join(x) if isinstance(x, list) else x)
df.to_csv("output.csv", index=False)
請注意 json_normalize 扁平嵌套 對象 但離開了 數組 正如 Python 所列出的 - 如果您跳過加入步驟,則您的 CSV 單元格包含 ['JavaScript', 'Python'] 逐字。每個人都打一次這個。
沒有熊貓可用嗎?標準庫處理平面 JSON 罰款:
import json, csv
with open("data.json") as f:
data = json.load(f)
with open("output.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
方法 4:如何將 JSON 從命令列轉換為 CSV?
最適合: shell 腳本、CI 管道、安裝 pandas 的伺服器都太過分了。
jq 本身就用它嗎 @csv,正確逃脫:
cat data.json | jq -r '
(.[0] | keys_unsorted) as $keys |
($keys | @csv),
(.[] | [.[$keys[]]] | @csv)
'
csvkit's in2csv 是低調的選擇:
pip install csvkit
in2csv data.json > output.csv
還有米勒(mlr) 當您想要在同一通道中進行過濾時,會閃爍:
mlr --json2csv filter '$age > 25' data.json > output.csv
可組合性是重點- curl -s api.example.com/data | jq ... > report.csv 是一行 cron 中完整的 API 到電子表格管道。
方法 5:可以將 JSON 直接匯入 Excel 或 Google Sheets 嗎?
最適合: 非開發商、即時刷新數據、一次性進口。
卓越: 資料 → 取得資料 → 從 Web 貼上 API URL,Power Query 為您提供了一個視覺化編輯器,可在載入前展開嵌套記錄。真正適合重複刷新同一來源。
谷歌表格: 擴充 → Apps 腳本,然後是一個小獲取函數:
function importJSON(url) {
const response = UrlFetchApp.fetch(url);
const data = JSON.parse(response.getContentText());
if (!Array.isArray(data) || data.length === 0) return [["No data"]];
const headers = Object.keys(data[0]);
const rows = data.map(item => headers.map(h => item[h] ?? ""));
return [headers, ...rows];
}
用於單元格中 =importJSON("https://api.example.com/data").
誠實的拍攝:對於一次性進口,用轉換 線上工具 打開 CSV 比任何一個都快。電子表格本機路由僅在資料按計劃刷新時才賺取設定成本。
您應該選擇哪種方法?
| 方法 | 設定 | 嵌套 JSON | 重複使用 | 數據保持本地化 |
|---|---|---|---|---|
| 線上轉換器 | 沒有 | 自動的 | 每次手動 | 是的 - 客戶端 |
| JavaScript /json2csv | npm 安裝 | 通過 flatten |
非常好 | 是的 |
| 蟒蛇/熊貓 | 點安裝 | json_normalize |
非常好 | 是的 |
| jq/csvkit/mlr | 包管理器 | 手動路徑 | 優(克朗/CI) | 是的 |
| Excel/表格 | 帳戶/應用程式 | 電源查詢使用者介面 | 好(自動刷新) | Excel:是的;表格:Google 伺服器 |
我的規則:第三次接觸瀏覽器工具 I'm 轉換相同形狀的資料 - 然後它就變成腳本。
哪些邊緣案例會破壞 JSON 到 CSV 的轉換?
四個陷阱幾乎佔了所有損壞的出口 I'已調試:
鍵不一致。 對象 1 有 email,對象2有 phone,物件 3 具有兩者。僅從第一個物件取得標頭,然後靜默丟棄資料。修復是所有物件的鍵並集,缺失值為空單元格 - 好的工具會自動執行此操作。
逃脫的特殊角色。 "史密斯、瓊斯和放大器;合作夥伴&報價;問題。根據 RFC 4180:包含雙引號中的逗號、引號或換行符以及雙任何嵌入引號的換行值 (("He said ""hello""").
大文件。 超過 100 MB 左右,整個檔案解析會變得很痛苦。反而流 - jq 流、pandas 大塊讀取和 JSON Lines 格式(每行一個物件)使兩者都變得更容易。對於高達幾十 MB 的文件,瀏覽器工具很好,因為那裡'沒有上傳。
編碼。 名稱和位址帶有非 ASCII 字元。將所有內容從頭到尾保留 UTF-8,並對 Windows 上的 Excel 產生懷疑,Windows 歷史上希望使用 BOM 正確偵測 UTF-8。
還有一種做法是 't 可選: 轉換前進行驗證。 截斷的 JSON 檔案在轉換過程中出現令人困惑的失敗,但顯然是在轉換過程中 json 格式化程式. 三十秒的驗證比十分鐘的"為什麼我的 CSV 空了。"
常見問題
如何免費將 JSON 轉換為線上 CSV?
將您的 JSON 貼到 toolz。dev 上的 JSON 到 CSV 轉換器- 它會立即產生 CSV,其中嵌套物件被展平並處理轉義,然後允許您複製或下載結果。無需註冊,且處理是 100% 客戶端,因此您的資料永遠不會離開瀏覽器。
我可以將嵌套 JSON 轉換為 CSV 嗎?
是的。嵌套物件扁平化為點符號標頭 (address.city),數組要麼加入分隔的字串,要麼分成索引列。這 toolz。dev 轉換器 自動套用點符號;在 Python 中, pd.json_normalize() 也做同樣的事情。
如何將 JSON 檔案轉換為 Python 中的 CSV?
import pandas as pd; pd.read_json("data.json").to_csv("output.csv", index=False) 對於平面 JSON。對於嵌套結構,請使用 pd.json_normalize(data) 首先 - 請記住自己加入任何數組列,因為標準化頁列表完好無損。
什麼'是轉換非常大的 JSON 檔案的最佳方法?
流而不是負載: jq 在命令列上,或具有分塊讀取的大熊貓。首先將檔案轉換為 JSON 行(每行一個物件)會使串流傳輸變得更加簡單。瀏覽器工具最多可舒適數十 MB;超過 ~100 MB,請使用命令列。
如何將 CSV 轉換回 JSON?
的 CSV 到 JSON 轉換器 反轉行程 - 每行都成為由標頭行鍵入的物件。按程序: pd.read_csv("data.csv").to_json(orient="records").
為什麼我的 CSV 在某些值附近有引號?
那'正確的行為,不是錯誤。 RFC 4180 要求在任何包含逗號、換行符或引號字元的值周圍重複引用,並嵌入引號加倍。電子表格和解析器在讀取時將其剝離。
JSON 到 CSV 的轉換無損嗎?
對於平面 JSON,是的。對於嵌套 JSON,值保留,但層次結構不保留't - 點符號標頭是扁平的 代表,您可以't 始終從它們重建精確的原始嵌套。保留來源 JSON;將 CSV 視為派生視圖。
為什麼我的列在轉換後未對齊?
幾乎總是逃避失敗:包含逗號的值被引用為 't,因此解析器會從該點看到額外的列。 It'這是我的 Laravel 匯出按鈕中的確切錯誤。使用實作 RFC 4180 而不是字串連接值的轉換器 - 如果您自己編寫了,請使用類似的值進行測試 Smith, Jones & Partners.
如何在 Excel 或 Google Sheets 中將 JSON 轉換為 CSV?
這兩個應用程式都透過助手而不是貼上匯入 JSON。在 Excel 中,使用 Data → 從檔案取得資料 → 從 JSON,然後在 Power Query 和 Close & 中平整查詢;載入。在 Google Sheets 中,透過臨時應用程式腳本貼上小陣列或使用。 JSON 到 CSV 轉換器 首先打開結果文件 - 通常是一次性的更快路徑。
我應該使用哪種 JSON 到 CSV 方法?
為了快速實現一次性,客戶端轉換器速度最快並保持資料私有。對於可重複的管道,請與 pandas 一起使用 Python;對於巨大的文件,請隨流 jq 在命令列上;只有當非開發人員擁有工作流程時,才會存取電子表格匯入。將工具與您'重複作業的頻率相匹配,而不是與檔案's 大小單獨匹配。
將方法與作業相符
JSON 到 CSV 看起來就像一個已解決的單行線,直到公司名稱中的逗號將 340 行客戶資料向右移動一列。此方法與尊重格式無關:根據 RFC 4180 逃逸、聯合金鑰、故意決定扁平化策略並保留原始 JSON。
對於下一次一次性轉換, JSON 到 CSV 轉換器 是十五秒的路徑。首先用驗證 json 格式化程式,當資料需要傳回時, CSV 到 JSON 轉換器 關閉循環 - 這三個都在您的瀏覽器中,它們都沒有看到您的資料伺服器端。
相關文章:
- JSON 工具終極指南 (2026)
- 如何在線上格式化 JSON:包含範例的完整指南
- 免費線上文字工具指南



