JSON Schema 驗證器
最後更新:2026年10月2日
用 JSON Schema 驗證 JSON 文件,並列出每一處未通過的約束及其路徑。文件與 Schema 都在你的瀏覽器中解析與檢查。
它檢查什麼
JSON Schema 描述一份文件允許具有的形狀:有哪些屬性、各自是什麼型別、值域與模式如何。本頁用一個 Schema 檢查一份文件,並列出每一處不滿足的位置,每條都帶路徑,方便你定位。
支援的關鍵字包括:type、const、enum、required、properties、additionalProperties、minProperties、maxProperties、items(單一 Schema 或 Schema 元組)、minItems、maxItems、uniqueItems、minLength、maxLength、pattern、minimum、maximum、exclusiveMinimum、exclusiveMaximum、multipleOf、allOf、anyOf、oneOf、not,以及指向同一 Schema 內部的本地 $ref 指標。
它刻意不做的事
- 不解析遠端
$ref。只解析同一 Schema 內部的指標(#/$defs/…、#/definitions/…)。去取另一個檔案意味著發出網路請求,而這正是本工具要避免的。 format不作為斷言。在較新的草案中format只是註記,不被強制,這裡也如此處理——email格式不會拒絕格式錯誤的位址。- 部分關鍵字未實作:
patternProperties、unevaluatedProperties、if/then/else、dependentSchemas、contains。使用它們的 Schema 仍會檢查其他關鍵字,但未實作的關鍵字不會被強制執行——所以不要把這裡的「通過」當成以它們為基礎的 Schema 的完整一致性結果。 - 不對 Schema 做中介驗證。語法上是有效 JSON、但邏輯有誤的 Schema 可能只是符合不到任何內容;本頁檢查的是文件,而不是 Schema 本身的正确性。
如何閱讀錯誤
每處失敗都回報在一個路徑上:$ 是文件根,點號進入屬性,方括號索引陣列。required 回報在「本應包含該屬性的物件」上——約束在物件上,而不在缺失的屬性上——訊息中會指明屬性名稱。anyOf 與 oneOf 只在失敗的那個實例上回報一次,而不是每個分支一次;滿畫面的分支錯誤反而會淹沒真正的問題。
常見問題
支援哪些 JSON Schema 關鍵字?
type、const、enum、required、properties、additionalProperties、minProperties、maxProperties、items(單一 Schema 或 Schema 元組)、minItems、maxItems、uniqueItems、minLength、maxLength、pattern、minimum、maximum、exclusiveMinimum、exclusiveMaximum、multipleOf、allOf、anyOf、oneOf、not,以及本地 $ref。
刻意不支援的有哪些?
遠端 $ref(只解析同一 Schema 內部的指標)、作為斷言的 format 關鍵字、patternProperties、unevaluatedProperties、if/then/else 與 dependentSchemas。使用這些關鍵字的 Schema 仍會驗證上面列出的關鍵字;未實作的關鍵字不會被強制執行,因此不要把這裡的「通過」當成以它們為基礎的 Schema 的完整一致性結果。
驗證是在伺服器上進行的嗎?
不是。文件與 Schema 都在你的瀏覽器中以 JSON.parse 解析,並在記憶體中檢查。不會上傳任何內容,中斷網路後頁面依然可用。
為什麼「缺少必要屬性」的錯誤回報在父路徑上?
因為約束就在那裡。JSON Schema 把 required 套用於物件,而不是缺失的那個屬性,所以錯誤回報在物件的路徑上——例如 $ 而不是 $.name——並在訊息中指明屬性名稱。
anyOf 與 oneOf 是如何回報的?
在失敗的那個實例上回報一則錯誤,而不是每個分支一則。anyOf 在沒有任何分支符合時失敗;oneOf 在符合的分支數不等於一時失敗,訊息會說明符合了幾個。把每個分支內部的錯誤都列出來反而會淹沒真正的問題。
它會告訴我 Schema 本身有錯,還是只檢查文件?
它用 Schema 檢查文件。如果 Schema 本身不是有效的 JSON,會另外告知。它不會用 JSON Schema 中介 Schema 驗證你的 Schema,因此語法正確但邏輯有誤的 Schema 可能只是符合不到任何內容。