這是什麼
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 和格式驗證。
怎麼用
- 把資料貼到 JSON 資料,把 Schema 貼到 JSON Schema,也可以分別上傳檔案。範例 會載入一筆故意寫錯幾處的使用者資料。
- 結果會隨輸入即時更新:資料有效時顯示綠色標記,否則顯示錯誤數量與錯誤清單。
- 規格版本 保持自動即可依
$schema判斷,也可以手動指定。關閉 列出所有錯誤 則遇到第一個錯誤就停止。 - 複製錯誤 會把錯誤清單複製為純文字,方便貼到問題回報或程式碼審查中。
如果任一側不是合法的 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 中。