JSON 格式化與驗證
貼上 JSON 即可格式化、驗證或壓縮,錯誤會回報到確切的行與列。
這個 JSON 工具能做什麼
把任意 JSON 文字貼進來,工具可以依統一縮排美化輸出、壓縮成單行,或者只是檢查它是否合法。當輸入不是合法 JSON 時,驗證器會指出解析失敗的精確行號與列號,並顯示附近的字元片段,你可以在幾秒內修好一個漏掉的逗號或沒加引號的鍵名,而不必在一大段文字裡逐字尋找。
所有處理都在你的瀏覽器裡、由 JavaScript 引擎內建的 JSON 解析器完成。你貼上的文字不會傳送到任何伺服器,所以拿它處理 API 回應、設定檔、日誌,或任何包含權杖、憑證、個人資訊的資料都是安全的。
使用方法
在輸入框中貼上或輸入 JSON,格式化會隨輸入自動進行。縮排可選 2 空格、4 空格或 Tab;勾選「鍵名排序」會在每一層巢狀裡依字母順序排列物件的鍵,這樣兩份文件用 diff 工具比對時一目了然。需要最小體積(例如放進 HTTP 請求或環境變數)時按「壓縮」去掉所有空白。「複製」把結果放到剪貼簿,「下載」儲存為 .json 檔案。
狀態列顯示位元組數、物件鍵總數與最大巢狀深度,在把一份大文件送往別處之前,這是一個快速的合理性檢查。
驗證器能捕捉的常見 JSON 錯誤
陣列或物件最後一項後面的多餘逗號在 JSON 中是不允許的,儘管多數程式語言能接受。字串或鍵名用單引號是非法的:JSON 要求雙引號。註解不屬於 JSON 規範,// 或 /* */ 都會導致失敗。沒加引號的鍵(如 {name: "x"})是 JavaScript 物件實字,不是 JSON。NaN、Infinity、undefined 這些特殊值在 JSON 裡不存在。以上每一種錯誤都會給出清楚的提示與可直接跳轉的位置。
背景:JSON 從哪裡來
JSON(JavaScript Object Notation)由 Douglas Crockford 在 2000 年代初提出,作為 XML 的輕量替代,語法直接借用 JavaScript 已有的物件實字。它在 2006 年被標準化為 RFC 4627,之後是 ECMA-404 與 RFC 8259(2017),後者是現行定義:六種值型別(物件、陣列、字串、數字、true/false、null),交換編碼為 UTF-8,不允許註解。它的興起與瀏覽器端應用的興起同步:一種瀏覽器能用 JSON.parse 原生解析的格式,勝過任何需要另外解析器的格式。
應用領域
幾乎所有 Web API 都回傳 JSON,所以拿到陌生回應的第一件事就是貼進格式化工具看它的結構。設定檔(package.json、tsconfig.json、VS Code 設定)、基礎設施定義(CloudFormation、Terraform 狀態)、NoSQL 資料庫(MongoDB 文件、PostgreSQL 的 jsonb 欄位)、日誌管線(ndjson 每行一個 JSON 物件)以及 JWT 權杖的負載,全都是 JSON;JSON 也常放在 URL 查詢參數裡傳輸,此時必須先做百分號編碼。相關格式在它之上擴充:JSON5 與 JSONC 為設定檔加入註解和尾隨逗號,JSON Schema 描述期望的結構,JSON Lines 在一個檔案裡串流存放多個文件——這些本驗證器都會依嚴格 JSON 拒絕,這是有意為之。
常見問題
我的 JSON 會被上傳嗎?
不會。格式化完全在瀏覽器中執行。頁面載入完成後你可以中斷網路,工具照常運作。
格式化和壓縮有什麼差別?
格式化(美化)加入換行與縮排,讓人能讀懂結構;壓縮去掉所有不必要的空白,讓資料體積最小以便機器傳輸。兩者產生的 JSON 在語意上完全相同。
為什麼在 JavaScript 裡能用的物件,工具卻說不是合法 JSON?
JavaScript 物件實字比 JSON 寬鬆得多。單引號、不帶引號的鍵、尾隨逗號與註解在 JavaScript 程式碼裡都沒問題,但 JSON 標準(RFC 8259)全部禁止。
有大小限制嗎?
沒有硬性限制。幾 MB 的文件在現代裝置上可以瞬間完成格式化,超大檔案只受瀏覽器記憶體限制。
鍵名排序會改變資料的含義嗎?
不會。依規範 JSON 物件是無序的,重新排列鍵得到的是等價文件。陣列是有序的,其順序始終保持不變。