DevToolPal
繁

JSON Schema 驗證

用 JSON Schema(2020-12、2019-09、Draft-07、Draft-04)驗證 JSON 資料,列出每個錯誤及其路徑。

本機處理,不會上傳

選項

JSON 資料

JSON Schema

驗證結果

結果會顯示在這裡

這是什麼

JSON Schema 是描述 JSON 資料結構的規格:物件必須有哪些屬性、每個值是什麼型別、允許的範圍與格式、陣列長度等等。OpenAPI 文件用它描述請求和回應,編輯器用它為設定檔提供自動完成,後端用它拒絕不合規的請求。

這個工具用 Schema 驗證 JSON 文件,並列出找到的每一個問題。每個錯誤都會顯示它在資料中的位置(如 /tags/1 這樣的 JSON Pointer)、易讀的說明,以及失敗的 Schema 關鍵字,方便你快速修正資料或 Schema。支援 2020-12、2019-09、Draft-07 和 Draft-04,包括 $ref、$defs、allOf/anyOf/oneOf、if/then/else、unevaluatedProperties 和格式驗證。

怎麼用

  1. 把資料貼到 JSON 資料,把 Schema 貼到 JSON Schema,也可以分別上傳檔案。範例 會載入一筆故意寫錯幾處的使用者資料。
  2. 結果會隨輸入即時更新:資料有效時顯示綠色標記,否則顯示錯誤數量與錯誤清單。
  3. 規格版本 保持自動即可依 $schema 判斷,也可以手動指定。關閉 列出所有錯誤 則遇到第一個錯誤就停止。
  4. 複製錯誤 會把錯誤清單複製為純文字,方便貼到問題回報或程式碼審查中。

如果任一側不是合法的 JSON,提示會說明是資料還是 Schema 有問題,並提供行號與欄號。

範例

使用下面的 Schema:

{
  "type": "object",
  "required": ["id"],
  "properties": {
    "id": { "type": "integer" },
    "age": { "type": "integer", "minimum": 0 }
  }
}

驗證文件 {"age": -1} 會得到兩個錯誤:在(根)缺少必填屬性 id;在 /age,值小於最小值 0。

小技巧

加上 "additionalProperties": false 可以抓出拼錯的屬性名稱,否則它們會被默默放過。固定值用 enum 或 const,產品代碼這類字串用 pattern。Schema 變大後,把重複的部分移到 $defs,再用 $ref 引用。

常見問題

› 支援哪些 JSON Schema 版本?

支援 2020-12、2019-09、Draft-07(同時涵蓋 Draft-06)和 Draft-04。「規格版本」選自動時,依 Schema 中的 $schema 關鍵字判斷;沒有 $schema 的 Schema 以 2020-12 處理。

› 錯誤中的路徑是什麼意思?

第一個路徑是 JSON Pointer,指向資料中驗證失敗的值,例如 /items/2/price;「(根)」代表整份文件。下方灰色那一行是失敗的關鍵字及其在 Schema 中的位置,例如 minimum · #/properties/age/minimum。

› 會檢查 email、date-time 這類格式嗎?

會。常見格式都會驗證:date、time、date-time、duration、email、hostname、ipv4、ipv6、uri、uri-reference、uuid、regex、json-pointer 等。未知格式依規格忽略。

› Schema 可以引用其他檔案嗎?

同一份 Schema 內部的引用可以使用,例如 $ref 指向 #/$defs/address。外部 URL 不會被下載,因為所有內容都不會離開瀏覽器;請把被引用的定義貼到 $defs 中。