繁體中文

開發者工具·語法轉換器

CSV 到 JSON 和 JSON 到 CSV:標頭、字串值和扁平化

· 工作原理

json csv 資料格式

嵌套 JSON 树,以單向方式展平為点 CSV 列
原始 ToolAcre 向量圖

CSV 是扁平的、無類型的且其自身的分隔符號不明確,而 JSON 是巢狀的和類型化的。這篇文章展示了轉換器如何將行映射到對象並映射回對象,以及每個方向上資訊遺失的位置。

每個數字都用引號返回 - CSV 匯出轉換為 JSON,其中 42 變為“42”,並郵政編碼暫時保留其前導零編碼暫時保留其前導零編碼

工作簿需求提供 CSV 到 JSON 範例,但 ToolAcre 從不讀取 CSV。引擎確切地通告了九個定向對,並沒有一個以 CSV 開頭。讀取檔案需要選擇分隔符號、引用、標題存在和儲存格類型;該小組拒絕做出四個無聲的猜測。因此,更正後的文章記錄了運送的 JSON 至 CSV 方向。

這種單向決策在介面和錯誤中都是可見的。 CSV 顯示為目標,而不是來源,並且嘗試反向返回 `UNSUPPORTED_CONVERSION` 並建議使用詢問方言和類型的工具。即使一般主題在其他地方很常見,暗示兩個方向的標題也會錯誤地描述產品。

CSV:從工具實際發送的 JSON-to-CSV 路徑開始

根 JSON 陣列提供行。一個普通的物件變成一行。唯一鍵包含數組的物件會解開該數組並警告它使用了指定的屬性。具有附加同級鍵的物件不會解包,因為這樣做會丟棄或重複這些同級。

每個選定的記錄在收集列之前都會被展平。記錄甚至可以是陣列內的標量;它們使用 `value` 欄位。檔案根處的裸標量會被拒絕,因為一個字串或數字不會定義包含記錄和欄位的表。

從 JSON 選擇記錄:陣列、單一物件和一鍵陣列包裝器

JSON 類型僅作為單元格文字存在。布林值變成 `true` 和 `false`,數字使用十進位呈現,null 變成空白單元格。 CSV 無法區分 null 和空字串,因此編寫器對 null 進行計數並警告歧義,而不是呼叫等效結果。

寬整數在此階段之前已經經過 JSON 解析,因此不安全的數位文字可能會遺失精確度。將標識符放在引號中可以保留其文字。當類似公式的字串以 `=`、`+`、`-`、`@`、製表符或回車符號開頭時,預設情況下會收到一個額外的撇號;實際數字 `-5` 仍然是一個數字並沒有前綴。

為什麼 CSV 輸出無法保留 JSON 類型

列是依首次出現順序排列的扁平化鍵的並集。如果一行具有 `a`,另一行具有 `b`,則輸出具有兩個列,並用空白單元格填入每個缺少的欄位。警告報告不規則的行,而不是將值轉移到錯誤的標題下。

排序物件鍵不適用於 CSV;作者的規則是在記錄中首次出現。這使得範例對於固定的 JSON 輸入穩定,但它不是模式契約。當下游導入需要規定的順序時,有意安排來源金鑰或對標頭進行後處理。

展平巢狀資料 — 點路徑(例如 address.city)、作為索引列或連接字串的數組,以及 CSV 根本無法保持形狀的點

巢狀物件鍵用點連接:`address.city`。陣列使用相同的分隔符號和數字索引:`tags.0`、`tags.1`。空物件和陣列在自己的路徑上保留一個空單元,而不是消失。這會產生一個矩形,同時承認一棵樹已被投影到名稱中。

已包含點的來源鍵與巢狀路徑不明確。 ToolAcre 會偵測並發出警告,但不會發明電子表格無法理解的轉義語法。深數組或長數組也可能超出 2,000 列上限,此時轉換將被拒絕,而不是發出普通電子表格軟體無法使用的表。

工作範例:客戶以兩種方式列出 — CSV 到 JSON,編輯巢狀欄位,然後 JSON 返回 CSV,嵌套扁平化

使用 `[ {"id":"0042","address":{"city":"Oslo"},"tags":["new","west"],"note":"=1+1"}, {"id":"0043","address":{"city":"Lima"},"tags":[],"note":null} ]`。標頭包括 id、address.city、tags.0、tags.1 和 note。第二行接收缺少標籤索引的空白,且其空註解與空文字無法區分。

第一個註解以撇號為前綴,因此電子表格將其視為文字。記錄以 CRLF 結尾,包含分隔符號、引號或行結尾的欄位使用雙引號,嵌入的引號使用雙引號。選擇分號或製表符會更改分隔符號;可以為需要的消費者添加可選的 UTF-8 BOM。

工作範例:巢狀客戶陣列一次展平為 CSV

格式錯誤或編碼不明確 CSV 位於此路由之外,因為沒有 CSV 進入其中。 CSV Cleaner 是選擇或偵測方言並修復引用的地方。這裡的來源是嚴格的 JSON ,輸出遵循記錄的編寫器約定。

轉換器也限制 100,000 行和 2,000 欄位的輸出。空數組會被拒絕,因為既沒有標題也沒有行的檔案不包含表格形狀。這些限制是強制執行的程式碼路徑,而不是效能承諾,且本文並未發明吞吐量資料。

重點:CSV 是一個表,JSON 是一棵樹 - 以及語法轉換器面板如何在它們之間移動而不上傳行

JSON 是一棵類型樹; CSV 是一個文字表。 ToolAcre 選擇行、展平路徑、聯合列、引號欄位並中和危險文字,但它無法保留空與空或稍後重建嵌套。這些損失是結構性的而非格式化的雜訊。

當電子表格形式的輸出是預期的工件時使用此方向。如果您需要 CSV 到 JSON,請選擇一個詢問分隔符號、標頭和類型的閱讀器。拒絕相反比返回根據未經審查的猜測構建的令人信服的 JSON 更安全。