可重建資料工作流程

JSON 扁平化指南:路徑、碰撞與可重建資料

扁平化是一種映射慣例,不是 JSON 標準的一部分。可用的匯出應說明路徑語法,並拒絕有歧義資料,而不是默默覆寫某個值。

內容更新: · 維護者:Hung Chi-Hsueh · 修正回報

選擇明確路徑語法

預設括號格式在兩方向只接受根物件。物件鍵以點號分隔,例如 user.address.city;陣列使用標準十進位括號,例如 users[0].name 或 matrix[0][1]。數字物件鍵仍是屬性:numeric.0 與 numeric[0] 不同。預設格式拒絕根陣列與基本型別,不會自動包裝。僅限扁平化的點號索引格式也接受根陣列,使用 users.0.name,並以空路徑保留空根陣列。此格式的數字物件鍵與陣列索引有歧義,因此不可重建。

來源物件鍵不可為空,也不能包含點號、[ 或 ],否則字面鍵 a.b 會和含 b 的 a 物件碰撞。工具拒絕整份輸入,不會自行選擇保留哪個值。斜線、波浪號、Unicode 與鍵內空白維持原樣;刻意拒絕精確片段 __proto__、constructor、prototype。不提供萬用字元、JSONPath、自訂分隔符或鍵名跳脫。

RFC 6901 JSON Pointer 是另一種標準語法,使用斜線與 ~ 跳脫。需要定位空鍵或含分隔符的任意 JSON 鍵時,請使用 Pointer 探索器;平面映射鍵不是 JSON Pointer。

保留語意,不虛構結構

Flatten 保留 null、布林、字串、支援的數字、空物件與空陣列作為末端值。空根物件產生 {}、欄位數為零。Unflatten 只接受這些末端值,平面映射內的非空容器會被拒絕;同一路徑不能同時是值與父節點,同一父節點也不能同時當物件與陣列。

陣列索引必須從零開始且連續。只有 items[1] 時會拒絕,不會虛構 items[0]:null。前導零、負索引、括號錯誤及過大索引會在配置陣列前拒絕。重複路徑,以及 a/a.b 或 a.0/a[0] 衝突會阻止整筆轉換,失敗沒有可匯出的部分結果。

預設括號格式中支援的值經扁平化再重建會保留 JSON 語意,不保留縮排、物件鍵順序或 1e3/1000 等數字原始寫法。共用嚴格 JSON parser 拒絕重複鍵、不安全整數、負零、未成對 Unicode 代理碼,以及序列化後會改值的數字;精確識別碼與小數請存為字串。

有限預覽與純本機處理

Flatten 來源上限為 1 MiB UTF-8;Unflatten 允許 8 MiB,讓符合上限的平面匯出可以重新讀入。每路徑最多 4,096 UTF-8 bytes,文件最多 100 層、50,000 節點,完整緊湊輸出最多 8 MiB;重建後的深度、節點與大小也會檢查。超限拒絕轉換,不會默默截斷資料。

轉換使用獨立本機 Worker,五秒逾時。取消會終止轉換;編輯來源、切換方向或離開模式會使待處理讀檔與舊結果失效。瀏覽器讀檔可能在取消後完成,但晚到結果不會套用。檔案須為無 BOM 的有效 UTF-8,無效位元組不會被替換。

表格每頁 100 欄,每值最多預覽 1,000 字元。複製、下載與展開的唯讀 JSON 包含完整結果。輸入與檔名不上傳、不儲存、不寫入網址,也不送至工具分析。下載檔仍可能含敏感資料;本機處理不是匿名化或安全刪除。剪貼簿權限與 Worker 能力依瀏覽器而異,失敗提供手動選取或明確重試提示。

範例
{"user":{"name":"Ada"},"items":[null],"empty":{},"numeric":{"0":"zero"}}
→ {"user.name":"Ada","items[0]":null,"empty":{},"numeric.0":"zero"}

拒絕:{"a.b":1,"a":{"b":2}}
拒絕:{"items[1]":"缺少索引零"}

資料可信度

資料來源