免費線上 JSON 格式化程序和驗證程序
JSON 是 APIs 和設定檔的通用語言,但縮小或格式錯誤的 JSON 很難閲讀和除錯。 Dokall 的 JSON 格式化程式會驗證您的輸入,突出顯示語法錯誤,並使用正確的縮排進行漂亮的列印。
您也可以縮小 JSON 以減少有效負載大小。一切都在客户端運行 - 您的 API 密鑰和敏感資料永遠不會接觸我們的伺服器。將此頁面加入書籤,以便在開發過程中快速進行 JSON 偵錯。
什麼是 JSON?
JSON(JavaScript Object Notation,JavaScript 對象表示法)是一種用於結構化數據的輕量級文本格式。它源自 JavaScript 對象語法,但與語言無關——幾乎所有編程語言都能解析和生成 JSON。它已成為 REST API、配置檔案和數據存儲的預設數據格式。
JSON 支持六種數據類型:字符串(雙引號)、數字、布爾值(true/false)、null、數組(有序列表)和對象(鍵值映射)。其簡潔正是優勢——格式本身沒有屬性、命名空間或內置模式。
JSON 語法規則
JSON 對語法要求嚴格。鍵必須是雙引號字符串——單引號和無引號的鍵均無效。字符串必須使用雙引號,不能用單引號。數組或對象最後一個元素後不允許有尾隨逗號。
數字不能有前導零(數字 0 本身除外),也不能以小數點結尾。布爾值是小寫的 true 和 false,不是 True/False 或 TRUE/FALSE。註釋不屬於 JSON 規範——如果檔案含有 // 或 /* 註釋,它就不是合法 JSON(不過部分解析器支持 JSONC 或 JSON5 等擴展)。
標記之間的空白會被忽略,因此你可以通過刪除所有空格和換行來壓縮(minify)JSON,或用縮進美化(pretty-print)以提高可讀性。兩者表示的是相同數據。
常見 JSON 錯誤及修復方法
"Unexpected token" 通常表示逗號、引號或括號位置不對。最常見原因是尾隨逗號——{"name": "test",} 在最後一個屬性後有逗號,這在 JavaScript 中合法但在 JSON 中不合法。
"Unexpected end of input" 表示解析器在所有方括號或花括號閉合之前就到達了字符串末尾。請清點開閉括號。帶括號匹配的編輯器對此很有幫助。
"Bad control character" 通常表示字符串包含未轉義的換行、製表符或其他控制字符。在 JSON 字符串中,換行必須寫成 \n,製表符寫成 \t,反斜槓寫成 \\。
"Duplicate key" 在技術上被 JSON 規範允許,但大多數解析器會使用最後一個值並靜默丟棄前面的值,這可能導致難以排查的 bug。Dokall 的格式化工具會標記重複鍵,便於你發現它們。
JSON 與 XML、YAML 的對比
JSON 緊湊且易於程序解析。它沒有註釋、沒有屬性,類型系統簡單。最適合:API、數據交換、不需要註釋的配置檔案。
XML 較為冗長,但支持屬性、命名空間、模式(XSD)和轉換(XSLT)。它具有自描述性,可表示混合內容(帶內聯標記的文本)。最適合:文檔型數據、SOAP API、對模式要求嚴格的企業系統。
YAML 是 JSON 的超集,語法更簡潔——用縮進代替花括號,支持註釋,並有日期等額外類型。但其顯著空白使編輯易出錯,且部分解析器存在任意代碼執行的安全隱患。最適合:配置檔案(Kubernetes、Docker Compose、CI/CD)、人工編輯的數據。
在 API 響應和程序化數據交換方面,JSON 已基本勝出。對需要人工編輯的配置檔案,YAML 或 TOML 往往更受青睞。
美化 JSON 與壓縮 JSON
美化後的 JSON 使用換行和縮進(通常為 2 或 4 個空格)使結構一目瞭然。更易於閲讀、審查和調試。適合開發階段、文檔,以及存儲在需要關注 diff 的版本控制配置檔案中。
壓縮 JSON 會去掉所有不必要的空白。一個 50 KB 的格式化 JSON 檔案壓縮後可能縮減到 30 KB。在成千上萬次 API 響應中,這能減少帶寬、加快解析並降低成本。適合生產環境的 API 響應、數據庫中存儲的數據以及網絡載荷。
Dokall 的格式化工具可一鍵在兩者間切換。數據完全相同——只改變空白。若還需要按鍵排序以獲得確定性輸出(便於比較兩個 JSON 對象),本工具支持按字母順序排序鍵。
在 API 中使用 JSON
在 API 請求中發送 JSON 時,將 Content-Type 標頭設為 application/json。接收 JSON 時,解析前請確認響應具有該內容類型。大多數 HTTP 客户端會自動處理,但內容類型不匹配是 "unexpected token" 錯誤的常見來源。
對於大型 JSON 載荷,可考慮使用流式解析器,增量處理數據而不是全部載入內存。在 Node.js 中,JSONStream 等庫可解析 GB 級檔案。在 Python 中,ijson 可實現同樣目的。
JSON 本身不原生支持日期、二進制數據或 BigInt 值。日期通常序列化為 ISO 8601 字符串(2024-01-15T10:30:00Z)。二進制數據用 Base64 編碼。超過 JavaScript Number.MAX_SAFE_INTEGER 的大整數應作為字符串發送,以防精度丟失。