Command Palette

Search for a command to run...

JSON 到 CSV 的轉換:開發人員在 2026 年使用的 5 種方法

JSON 到 CSV 的轉換:開發人員在 2026 年使用的 5 種方法

T
Toolz Team
|Jun 27, 2026|15 閱讀

數據工具 合集的一部分

我編寫的第一個 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。 產品經理詢問"我可以把它當作電子表格嗎?"是最常見的觸發器。這是我損壞的匯出按鈕的觸發器。

Diagram showing JSON data flowing through conversion to CSV format with use cases branching to spreadsheets, databases, and analytics


是什麼讓 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沒有&quot的概念;內部。"所以你選擇一個扁平化策略,每個策略都有一個成本:

點符號扁平化- 嵌套鍵變成複合標頭:

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 的內容。

  1. 打開 JSON 到 CSV 轉換器.
  2. 貼上您的 JSON - 一系列物件或單一物件。
  3. 該工具檢測結構,將嵌套物件展平為點符號,並立即渲染 CSV。
  4. 複製它,或下載 .csv.

我在任何非重複出現的腳本上預設執行此操作的原因:零設定、正確的 RFC 4180 轉義(學到了該課程)、跨不一致物件的自動金鑰統一,以及 - 因為它'客戶端 - 充滿您剛剛貼上的客戶電子郵件的 API 回應永遠不會離開您的電腦。如果您不這樣做,請觀看網路標籤;相信我;那'這是我應用於每個線上轉換器的測試,但大多數都失敗了。

其中'是錯誤的工具:反覆轉換(編寫它)和深層病態嵌套,其中你'會想要手工挑選扁平化策略。

Diagram of the toolz.dev JSON to CSV converter showing JSON input on the left and CSV output on the right


方法 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 &amp 中平整查詢;載入。在 Google Sheets 中,透過臨時應用程式腳本貼上小陣列或使用。 JSON 到 CSV 轉換器 首先打開結果文件 - 通常是一次性的更快路徑。

我應該使用哪種 JSON 到 CSV 方法?

為了快速實現一次性,客戶端轉換器速度最快並保持資料私有。對於可重複的管道,請與 pandas 一起使用 Python;對於巨大的文件,請隨流 jq 在命令列上;只有當非開發人員擁有工作流程時,才會存取電子表格匯入。將工具與您'重複作業的頻率相匹配,而不是與檔案's 大小單獨匹配。


將方法與作業相符

JSON 到 CSV 看起來就像一個已解決的單行線,直到公司名稱中的逗號將 340 行客戶資料向右移動一列。此方法與尊重格式無關:根據 RFC 4180 逃逸、聯合金鑰、故意決定扁平化策略並保留原始 JSON。

對於下一次一次性轉換, JSON 到 CSV 轉換器 是十五秒的路徑。首先用驗證 json 格式化程式,當資料需要傳回時, CSV 到 JSON 轉換器 關閉循環 - 這三個都在您的瀏覽器中,它們都沒有看到您的資料伺服器端。


相關文章:

Frequently Asked Questions

Paste your JSON into the JSON to CSV Converter on toolz.dev — it instantly generates CSV with nested objects flattened and escaping handled, then lets you copy or download the result. No signup, and processing is 100% client-side, so your data never leaves your browser.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!