我在任何 SaaS 產品上的一半工作就是將資料從系統中獲取並交到不編寫程式碼的人手中。創辦人想要月份'在電子表格中註冊。支援主管想要在 Excel 中對門票進行排序。會計師希望訂單作為 .csv 他們可以樞軸。資料以 JSON 的形式存在,因為這就是 API 傳回的內容,每次任務都相同:將這個物件陣列變成人類可以打開的列和行。我厭倦了為其編寫一次性腳本,這正是工具的原因 JSON 到 CSV 轉換器 存在。本指南是我對這種轉換的看法,包括那些讓人絆倒的部分。
TL;DR: JSON 到 CSV 轉換器取得一系列物件並將其寫入逗號分隔的行,每個屬性一列,因此電子表格可以開啟它。困難的部分是具有不同欄位、嵌套物件和包含逗號的值的記錄。一個好的轉換器可以從所有鍵的並集建立標頭,可以將嵌套物件扁平化為點符號列,並根據 RFC 4180 轉義欄位。Toolz 工具執行所有三個客戶端操作,並允許您選擇分隔符號和 CRLF 行結尾,以便檔案在 Excel 中乾淨地開啟。
我以 Laravel 和 React 為基礎,因此 JSON 是我的本機格式,CSV 是我匯出的通用語言。有趣的工程並不是每個物件都有相同三個鍵的快樂路徑;這是生產資料的混亂現實,也是大多數轉換器悄悄做錯事的地方。
什麼是 JSON 到 CSV 轉換器?
JSON 到 CSV 轉換器讀取物件的 JSON 陣列並產生一個表:屬性名稱成為標頭行,每個物件成為其下方的一個資料行。貼上來自 API 端點、資料庫查詢或匯出文件的回應,您將獲得一個可以直接在 Excel、Google Sheets 或 Numbers 中開啟的檔案。它是格式機器交換和人們實際工作的格式之間的橋樑。
理想的輸入是一組平面對象,它們都共享相同的鍵,因為它完美地映射到矩形表上。真實數據很少那麼整潔。物件會遺失一個字段,值嵌套兩個層級深,並且某些條目是數組而不是標量。專用轉換器的全部值是它對於每種情況都有定義的、合理的答案,而不是拋出錯誤或丟棄資料。如果您的 JSON 被縮小或您只想先檢查它,請將其運行到 JSON 格式化程式 在轉換之前列印並驗證它。
它如何處理具有不同欄位的物件?
這是打破樸素轉換器的第一件事,值得理解,因為生產 JSON 幾乎從來沒有統一的物件。假設您的數組有一個物件 id, name, 和 email,下一個是 id, name, 和 phone. CSV 應該有哪些欄位?
正確答案是所有物件中每個鍵的並集,並按每個鍵首次出現的順序進行。所以標頭變成了 id, name, email, phone,任何缺少其中一個鍵的物件都會在該列中得到一個空單元格。沒有任何內容被丟棄,表格保持矩形。僅讀取第一個物件的鍵的惰性轉換器將默默地丟失 phone 完全列,帶上每個電話號碼。 Toolz 轉換器掃描所有行以建立標頭,因此不均勻的記錄仍然排列成一個乾淨、完整的表。這種行為是您可以信任的匯出行為與安靜地省略資料(直到為時已晚)的行為之間的差異。
嵌套物件和陣列怎麼樣?
JSON是一棵樹; CSV 是一個網格。將一個平整到另一個是第二個轉換器發散,正確的選擇取決於您計劃如何處理該文件。
對於嵌套對象,您有兩個合理的選項,並且該工具支援這兩個選項。平整後,嵌套物件將擴展為點符號列,因此 { "address": { "city": "Paris", "zip": "75001" } } 成為一個 address.city 列和 address.zip 列。這就是當嵌套欄位是真實資料時您想要的,人們會讀取和排序。扁平化後,整個嵌套物件在單一儲存格內寫入為緊湊的 JSON 字串,當結構不透明且您只需逐字保存它時效果會更好。
數組有自己的選擇,因為沒有單一正確的方法可以將清單壓縮到一個儲存格中。您可以將數組儲存為 JSON,保留 ["a","b"] 完好無損,因此可以完美往返,或者您可以使用分隔符號連接元素以獲得更人性化的可讀性 a; b. 當程式讀回檔案時使用 JSON,當一個人是受眾且可讀性獲勝時使用 join 格式。下表總結了決策。
| 輸入形狀 | 壓平 | 壓平 |
|---|---|---|
{"user":{"name":"Ada"}} |
列 user.name = Ada |
列 user = {"name":"Ada"} |
{"tags":["x","y"]} (陣列為 JSON) |
列 tags = ["x","y"] |
列 tags = ["x","y"] |
{"tags":["x","y"]} (數組已加入) |
列 tags = x; y |
列 tags = x; y |
| 缺少鑰匙的物體 | 該列中的空單元格 | 該列中的空單元格 |
為什麼逗號和引號需要轉義?
這條規則是,忽略後,會產生一個看起來不錯的文件,直到有人打開它並且列都錯誤為止。 CSV 使用逗號來分隔字段,那麼當一個值包含逗號時會發生什麼?或雙引號?還是多行音符的換行?
RFC 4180(CSV 最接近標準的東西)準確地回答了這個問題:任何包含分隔符號、雙引號或換行符的欄位都必須用雙引號括起來,並且該欄位內的任何雙引號都必須加倍。所以值 Baker, Smith & Co. 寫為 "Baker, Smith & Co.", 和 She said "hi" 成為 "She said ""hi""". Toolz 轉換器會自動將這些規則套用到每個儲存格,這就是為什麼地址、具有數千個分隔符號的價格或自由文字評論會在作為單一完整欄位進入電子表格時倖存下來,而不是破碎成額外的列。
如何在 Excel 中乾淨地開啟檔案?
您可能會認為 CSV 是 CSV,但 Windows 上的 Excel 對一件事很挑剔:行結尾。正確解決這個問題是完美開啟的檔案與行出現合併或分割的檔案之間的差異。
Windows 上的 Excel 預計每一行都會以回車符和換行符(CRLF 對)結束。如果您遞給它一個帶有 Unix 樣式 LF 行結尾的文件,它可能會誤讀行中斷的位置,特別是當引用的欄位包含自己的換行符時。轉換器可讓您選擇 LF 或 CRLF,因此當 Windows 上的受眾為 Excel 時選擇 CRLF,對於大多數其他工具和 Google Sheets 則選擇 LF,這對其中任何一個都感到滿意。您也可以選擇分隔符號:逗號是預設值,但分號在歐洲地區很常見,其中逗號是小數點分隔符,當您的資料本身充滿逗號時,製表符或管道會派上用場。將分隔符號和以目的地結尾的行進行匹配是一個五秒的選擇,可以節省稍後的支援票證。
在線轉換敏感的 JSON 安全嗎?
是的,因為它都沒有離開你的瀏覽器。轉換的每個部分,從解析 JSON 到轉義每個欄位再到加入行,都在您自己的電腦上以 JavaScript 運行。沒有上傳,也沒有伺服器,所以沒有任何內容被傳輸、記錄或儲存。開啟網路標籤並按一下「轉換」:您將看到沒有請求外出,一旦頁面載入,工具就會在網路斷開的情況下運作。
這並不是 JSON 的一個小細節,因為 JSON 就是 API 回應和內部系統所說的。您正在轉換的陣列可能保存使用者記錄、訂單資料、存取令牌或後端傳回的任何其他內容。將有效負載傳送到遠端伺服器的轉換器會將私人回應變成其他人'日誌行。完成工作客戶端意味著資料準確地停留在開始的位置。這是 toolz。dev 上每個工具的預設值,如果您想要更完整的情況來說明該架構的重要性,我將其放在 線上工具的資料隱私指南.
這在真正的管道中適合哪裡?
就其本身而言,轉換器是一個步驟,但它通常是較長流程的最後一跳,並且它自然地與少數其他工具配對。我這一周最常見的往返是:從 API 匯出 JSON,編輯或過濾它,轉換為 CSV,然後將其交給住在電子表格中的人。當他們將其發回更改時,我會使用 CSV 到 JSON 轉換器,它根據 RFC 4180 解析檔案並推斷類型,以便我再次獲得乾淨的物件。這兩個工具是故意相互鏡像的,這就是它們交叉連結的原因。
在轉換之前,我經常希望將資料視為網格來對其進行健全性檢查 CSV 檢視器 將 CSV 呈現為可排序的表,以便我可以確認匯出看起來正確。當目的地根本不是電子表格而是另一個會說 XML 的系統時, XML 到 JSON 轉換器 它的對應部分涵蓋了這一段。因為每一個都在本地運行,所以您可以將它們鏈接到同一個私人文件上,而無需上傳。如果您要為此類資料爭論組裝一組首選工具,我的 web 開發人員工具包指南 涵蓋了我如何考慮組裝一個。
常見問題
如何將 JSON 轉換為 CSV?
打開 JSON 到 CSV 轉換器,將物件的 JSON 陣列貼到輸入框中,然後按一下「轉換」。物件鍵變成標題行,每個物件變成資料行,然後您可以複製 CSV 或將其下載為 .csv 在 Excel 或 Google Sheets 中開啟的檔案。所有處理都發生在您的瀏覽器中,因此不會上傳任何內容。
轉換器期望什麼 JSON 結構?
物件數組是理想的,其中每個物件變成一行。單一物件也被接受並成為一行檔案。不是物件的值被放置在 a 下 value 列表示沒有任何內容遺失,當這種情況發生時,工具會警告您。
它如何處理具有不同欄位的物件? 標頭是所有物件中發現的每個鍵的並集,並按照每個鍵首次出現的順序保存。缺少其中一個鍵的物件只會在該列中取得一個空單元格,因此不均勻的記錄仍然會產生一個乾淨、完整的表,不會丟棄任何資料。
如何處理嵌套物件和陣列?
隨著扁平化,嵌套物件會擴展為點符號列,例如 address.city;關閉後,該物件將寫入一個儲存格中的 JSON 字串。陣列可以儲存為 JSON 以準確保存它們,也可以與分隔符號連接以獲得更具可讀性的列。您按轉換進行選擇。
為什麼我應該使用 Excel 的 CRLF 行結尾? Windows 上的 Microsoft Excel 預計每行末尾都會出現回車加換行功能。選擇 CRLF 可以避免開啟檔案時行被合併或誤讀。對於大多數其他工具和 Google Sheets,LF 運作良好。
值內的逗號和引號是否正確轉義? 是的。根據 RFC 4180,任何包含分隔符號、雙引號或換行符的欄位都包裹在雙引號中,並且內部引號被加倍。這將位址、描述和其他自由文字保留為單一有效字段,而不是分割為列。
轉換敏感的 JSON 安全嗎? 是的。轉換在您的瀏覽器中完全以 JavaScript 運行,沒有網路請求攜帶您的數據,沒有任何記錄或存儲,並且一旦加載即可離線工作。包含 API 金鑰、使用者記錄或內部識別碼的 JSON 永遠不會離開您的電腦。
我可以將 CSV 轉換回 JSON 嗎? 是的。這 CSV 到 JSON 轉換器 反轉該過程,將逗號分隔的檔案解析回具有類型推斷的物件的 JSON 陣列。往返讓您可以在電子表格和 API 之間移動數據,而無需手動重寫。



