JSON Schema Validator
新Validate JSON against a JSON Schema (draft-07 / draft-2020-12) with clear error messages.
Runs entirely in your browser. Nothing is uploaded.
什麼是 JSON Schema,為什麼它很重要?
JSON(JavaScript 物件表示法)是 Web API、設定檔和資料交換的通用語言。但原始 JSON 沒有內建的型別系統——一個欄位今天可能是字串,明天可能是數字,發現不匹配的唯一方法是執行時期崩潰或隱蔽的資料錯誤。JSON Schema 填補了這一空白:它是一種宣告式詞彙,用於描述 JSON 文件的預期結構和約束,在執行時期對實際資料進行驗證。
團隊使用 JSON Schema 在處理之前驗證 API 請求載荷,強制執行啟動時載入的設定檔結構,從單一事實來源自動產生文件和 UI 表單,以及維護微服務之間的契約一致性。OpenAPI——REST API 文件的標準——直接建立在 JSON Schema 之上,使其成為 Web 上部署最廣泛的資料驗證標準。
JSON Schema 草案版本:Draft-07、Draft 2019-09 和 Draft 2020-12
JSON Schema 經歷了多個規範草案。Draft-07(2018 年發布)在所有主流驗證器函式庫中仍然是支援最廣泛的版本,也是 OpenAPI 3.0 使用的方言。它引入了強大的 if/then/else 條件驗證關鍵字、readOnly/writeOnly 屬性注釋以及內容編碼關鍵字。如果你今天正在編寫 schema 且不需要最新功能,Draft-07 是獲得最大生態系統相容性的最安全選擇。
Draft 2020-12 是目前的穩定規範,引入了幾個重要變更:items 關鍵字被 prefixItems 取代用於元組驗證,動態參考使用 $dynamicRef 而非 $recursiveRef,新的 unevaluatedProperties 和 unevaluatedItems 關鍵字提供了對額外內容更精確的控制。
JSON Schema 核心關鍵字詳解
type 關鍵字強制執行資料型別:string、number、integer、boolean、array、object 或 null。required 列出物件中必須存在的屬性。properties 將每個屬性名稱對應到其自己的子 schema。pattern 將正規表達式套用於字串值。minimum、maximum、minLength 和 maxLength 約束數字和字串範圍。enum 將值限制為一組固定的允許值;const 將其限制為單一值。
組合關鍵字讓你從簡單的構建區塊構建複雜的規則:allOf 相當於邏輯 AND,anyOf 相當於 OR,oneOf 相當於 XOR。not 關鍵字反轉一個 schema。if/then/else 關鍵字啟用條件驗證。它們合在一起讓你無需編寫自訂命令式程式碼就能表達幾乎任何驗證規則。
生產環境中的 JSON Schema:API 契約和 CI 流水線
在生產系統中,JSON Schema 驗證在伺服器端或 CI 流水線中執行,使用 Ajv(JavaScript/Node.js)、jsonschema(Python)或 Newtonsoft.Json(C#)等函式庫。Schema 與應用程式碼一起提交到版本控制,以便像其他變更一樣審查和追蹤契約變更。破壞性變更——刪除必填欄位、縮小型別——在程式碼審查時被發現,防止到達生產環境並破壞使用者。
這個基於瀏覽器的工具非常適合在提交之前迭代設計和除錯 schema。貼上你的資料,編寫你的 schema,點擊驗證,閱讀詳細的錯誤訊息,然後優化——無需伺服器,無需 npm install,無需往返。驗證器還會在每次驗證執行時美化列印你的 JSON,使其成為便捷的 JSON 格式化工具和 schema 測試器的組合。
實際範例:驗證 API 回應
假設你的 API 回傳一個使用者物件。驗證它的 JSON Schema 可能需要一個整數 id、一個非空字串 name、一個符合電子郵件模式的字串 email,以及一個來自 'admin'、'editor' 和 'viewer' 列舉的選填字串 role。將 additionalProperties 設定為 false 確保你的 API 永遠不會靜默回傳下游使用者可能無意中依賴的未記錄欄位。
if/then/else 功能支援條件規則——例如,如果 role 是 'admin' 則需要 permissions 陣列,否則禁止。這些組合規則讓單一 schema 覆蓋物件的多個有效形狀,無需重複屬性定義。在將 schema 嵌入程式碼庫之前在這裡編寫和測試它,可以顯著節省生產環境的除錯時間。
UtiloKit 與其他 JSON Schema 驗證器的比較
大多數線上 JSON Schema 驗證工具分為兩類:可視化 schema 構建器和伺服器端 API 驗證器。jsonschema.net 強迫你透過點擊式 UI 構建 schema——對於學習 schema 結構的初學者很有幫助,但對於已經知道需要哪些關鍵字並想要快速測試他們編寫的 schema 的開發者來說太慢了。
jsonschemavalidator.net 基於 Microsoft 的 Newtonsoft.Json 函式庫,使用對 JavaScript 開發者來說不熟悉的 .NET 屬性路徑和錯誤碼回報錯誤。Stoplight 和 SwaggerHub 等工具將 schema 驗證作為完整 OpenAPI 文件的一部分,需要專案設定和帳戶。
UtiloKit 的驗證器執行在與大多數 Node.js、Express 和 Fastify 應用相同的 Ajv 引擎上。錯誤訊息、JSON 指標路徑和關鍵字行為與你的生產環境完全相符——它在你的瀏覽器中免費執行,無需帳戶、無需上傳、無檔案大小限制、無每日使用上限。
Frequently asked questions
什麼是 JSON Schema?
JSON Schema 是一種用於注釋和驗證 JSON 文件的宣告式詞彙。它定義了 JSON 文件必須滿足的預期結構、資料型別和約束。團隊使用它來驗證 API 載荷、強制設定檔結構、自動產生文件和 UI 表單,以及確保微服務之間的資料一致性。OpenAPI 3.0 和 3.1 都建立在 JSON Schema 之上。
這個驗證器支援哪個 JSON Schema 草案版本?
這個驗證器實作了 JSON Schema Draft-07 的核心關鍵字,這是所有主要驗證器函式庫中支援最廣泛的版本,包括 Ajv(JavaScript)、jsonschema(Python)和 Newtonsoft.Json(C#)。Draft-07 引入了 if/then/else 條件驗證、readOnly/writeOnly 注釋和內容編碼關鍵字。
allOf、anyOf 和 oneOf 有什麼區別?
allOf 要求資料對每個列出的子 schema 都有效——它就像邏輯 AND。anyOf 要求對至少一個子 schema 有效——邏輯 OR。oneOf 要求對恰好一個子 schema 有效——邏輯 XOR。這些組合關鍵字讓你從簡單的可複用部分構建複雜的驗證規則。
additionalProperties: false 有什麼作用?
它禁止物件中任何未在 properties 關鍵字下明確列出的屬性。這建立了一個封閉的 schema——對於嚴格的 API 契約非常有用,其中意外欄位應導致驗證失敗。這是最常見的陷阱之一:如果你在不更新 schema 的情況下向資料新增屬性,驗證將失敗。
我可以驗證物件陣列嗎?
可以。將 type 設定為 'array' 並提供 items 子 schema。陣列中的每個元素都將根據該子 schema 進行驗證。對於元組驗證,在 Draft-07 中將 items 設定為 schema 陣列。你還可以使用 minItems、maxItems 約束陣列長度,並使用 uniqueItems: true 強制唯一性。
如何使用 $ref 參考子 schema?
在頂層 $defs 物件中定義可複用的 schema,然後用 '$ref': '#/$defs/SchemaName' 參考它們。這保持你的 schema DRY 且可讀。這個驗證器只支援本地(同文件)$ref——指向外部檔案的遠端 $ref URL 不會被取得。
最常見的 JSON Schema 驗證錯誤有哪些?
最常見的錯誤是:缺少必填屬性、型別不匹配、pattern 違規、範圍違規以及當 additionalProperties 為 false 時出現額外屬性錯誤。這個驗證器會回報每個錯誤以及指向失敗資料的精確 JSON 指標路徑。