開發與資料處理

JSON 格式化後怎麼確認資料沒有被改掉?

格式化 API 回應或設定檔前先保留原文,再核對欄位型別、陣列筆數、重複 Key 與大整數,避免排版時誤把資料改掉。

撰文: 3sec 編輯部 4 分鐘閱讀 1788 字

先分清楚「文字一樣」和「資料一樣」

JSON 格式化一定會改變縮排、換行與空白,所以格式化前後的文字通常不會逐字相同;真正要確認的是欄位名稱、型別、數值、陣列順序與巢狀關係沒有改變。先把原始內容存成唯讀副本,再處理另一份,才有可靠的核對基準。

例如測試環境回傳一筆訂單資料,裡面有字串型別的 "orderId": "000128"、布林值 "paid": false,以及三筆 items。排版後應保留前導零、布林型別與三筆順序。若只是看到畫面變整齊就貼進設定檔,很容易漏掉某個值已從字串變成數字,或複製時少了陣列末端。

先記下幾個可快速驗證的基準:

  • 最上層預期有哪些 Key
  • 重要 ID 是字串還是數字
  • 主要陣列有幾筆、第一筆與最後一筆的穩定識別值是什麼
  • null、空字串、空陣列與欄位不存在分別代表什麼
  • 內容是否含 Token、Cookie、Email 或客戶資料,不適合直接分享

用格式化器先解析,不要一邊猜一邊改

先把工作副本貼到 JSON 格式化器,再選擇「只驗證」或「格式化」。目前工具會用瀏覽器的 JSON.parse 解析輸入;有效時可用 2 格、4 格或 Tab 縮排,也能壓成單行,輸出框會顯示字元數與巢狀 Key 數量。輸入框與唯讀輸出框分開,方便保留貼上的工作內容。

如果 JSON 無效,工具不會自動補字或猜測正確資料,而是清空輸出並顯示解析器的錯誤訊息;執行環境有提供位置時,頁面也會換算行、欄作為檢查起點。錯誤位置不一定就是原因,少一個逗號時,解析器常到下一個 Key 才發現結構矛盾。

遇到錯誤可依序看三件事:

  • 逗號:物件成員或陣列項目之間需要逗號,最後一項後面不能多一個逗號。
  • 引號:Key 與字串使用半形雙引號;從文件複製的彎引號、單引號或字串內未跳脫的雙引號都可能失敗。
  • 括號:{ 要和 } 配對,[ 要和 ] 配對;從 Log 截到一半的 API 回應通常不是能靠補一個括號就還原的完整資料。

不要為了讓狀態變成有效而反覆刪字。若內容來自 API,應回到原始回應或服務文件;若來自設定檔,應先確認產生它的程式與版本。

有效 JSON 仍可能在解析後失去資訊

通過語法驗證不代表每種輸入都適合直接重新輸出。這個工具採用 JSON.parse 後再 JSON.stringify 的流程,日常 API 資料通常能正常排版,但有兩類內容需要先處理。

第一類是超過 JavaScript 安全整數範圍的長 ID。像資料庫流水號、雪花 ID 或帳務序號若沒有用引號包成字串,瀏覽器解析成數字時可能失去個位數精度。最保守的做法是讓產生端把識別碼輸出為字串,而不是等格式化後才猜原值。看到 16 位以上整數時,先對照原始來源。

第二類是同一物件內的重複 Key,例如同時出現兩個 "status"。解析後通常只會保留後面的值,重新格式化時前面的項目便不見了。重複 Key 即使被某些解析器接受,也不適合作為可追溯的交換資料;應請產生端修正,而不是把最後一個值當成已確認的答案。

此外,"false" 與 false、"128" 與 128、null 與缺少欄位都不同。格式化器只判斷 JSON 語法,無法知道訂單狀態、功能開關或欄位契約是否符合系統要求。

用關鍵欄位做排版後驗收

驗收格式化結果時,先看結構,再看值,最後才複製。把輸出與先前記下的基準逐項對照:最上層 Key 是否齊全、陣列筆數是否相同、重要 ID 是否仍有引號、布林值與 null 是否維持原型別。工具顯示的 Key 數量可以當提示,但不能取代欄位核對,也不會計算業務上預期的必填欄位。

若排版目的是建立型別草稿,可把已確認且不含秘密的樣本交給 JSON 轉 TypeScript Interface 工具;它會依單一樣本推測巢狀型別,無法證明所有 API 回應都符合相同結構。空陣列、可選欄位與不同回應分支仍要回到正式 Schema 或 API 文件。

如果收到的是 Base64 字串,只有在對方明確說明內容是 Base64 編碼文字時,才使用 Base64 編解碼工具解碼後再驗證 JSON。Base64 不是加密,也不會替資料做完整性驗證;不要把不明內容解碼後直接當成可信設定。

分享或套用前再做一次實際檢查

最後檢查的對象應是準備送出或套用的那一份輸出。搜尋 token、authorization、password、email 等敏感欄位,以不會混淆型別的測試值取代;接著重新驗證一次,確認遮蔽過程沒有破壞引號或逗號。

設定檔應先放進測試環境或使用該程式提供的預覽、驗證命令;API Payload 則以最小的測試請求確認欄位契約。JSON 格式正確只代表解析器讀得懂,不代表應用程式接受,也不代表資料有權被分享。

常見問題

格式化會改變 Key 的值嗎?

一般排版只會改空白,但工具會先解析再輸出;重複 Key、過大的數字或特殊數值表示法可能出現資訊損失,所以重要資料要用原始副本核對。

為什麼錯誤訊息指向看起來正常的下一行?

解析器常在讀到下一個 Key 或結尾時,才發現上一段少了逗號、引號或括號。應同時檢查提示位置、前一行與最近的開頭括號。

Key 數量相同就代表資料完全相同嗎?

不代表。不同 Key 可能得到相同數量,陣列內容與值也可能不同;Key 數只適合當快速警示,仍要核對重要欄位。

長整數為什麼建議用字串?

瀏覽器中的 JSON 數字會轉成 JavaScript Number,超過安全整數範圍後可能無法精確表示。識別碼不需要數學運算時,應由資料產生端以字串傳送。

格式化成功後可以直接放進正式環境嗎?

不可以只靠格式化結果。還要依正式 Schema、必要欄位、權限與測試流程驗證,並先移除不該進入設定檔的秘密或個資。