~/tools / JSON Schema Validator
JSON Schema Validator — 依據 JSON Schema 檢查 JSON
依據 JSON Schema 檢查 JSON 資料,並列出每個問題所在的路徑與未通過的規則。涵蓋 Draft 2020-12 的主要關鍵字,適合用來檢查 AI 模型的結構化輸出。資料不會離開你的瀏覽器。
對於所支援的關鍵字,遵循 JSON Schema Draft 2020-12。$ref 只會讀取同一份 schema 內的目標。
所有處理都在你的瀏覽器中執行。schema 與資料都不會被上傳。
JSON Schema 用來描述合法的 JSON 長什麼樣子:型別、必要屬性、允許的值與範圍。本工具會依據 schema 檢查一份 JSON,並列出每個問題在資料中的位置,以及未通過的 schema 關鍵字。AI API 可以把模型的回覆限制在某個 schema 內,但回覆的值仍可能出錯、遭到拒絕或中途被截斷,因此自行再檢查一次比較穩妥。本工具不檢查的關鍵字(例如 format),在你的 schema 用到時會一併列出,所以「通過」不會在不知不覺間比看起來更寬鬆。
使用情境
- 確認 AI 模型的結構化輸出是否符合你給它的 schema
- 在把 schema 用到 API 之前,先用幾筆合法與不合法的樣本測試
- 找出一份大型 JSON 文件中是哪個屬性違反了規則
使用方法
- 將 schema 貼在左側、JSON 資料貼在右側,或載入範例。
- 查看結果:若通過會顯示通過,否則會列出問題,包含資料中的路徑與未通過的規則。
- 若出現「未驗證的關鍵字」提示,請一併確認。
schema 檢查什麼,不檢查什麼
- properties 只檢查實際存在的屬性。只有名稱列在 required 中的屬性才是必要的,所以沒有列出的屬性可以不存在。
- additionalProperties 適用於既不符合 properties、也不符合 patternProperties 的名稱。若省略它,就允許額外的屬性。
- integer 符合任何小數部分為零的數字。
- pattern 是 ECMA-262 規則運算式,且不會固定在開頭或結尾:pattern b 會符合字串 abc。若整個字串都必須符合,請加上 ^ 和 $。
- minLength 與 maxLength 依 RFC 8259 的定義計算字元,所以一個 emoji 算一個。
- format 預設是註解,是否檢查屬於選擇性。本工具不檢查它,並會在 schema 用到它時告知。
- 未知的關鍵字會被視為註解,所以像 requierd 這樣拼錯的關鍵字會被忽略,不會讓 schema 驗證失敗。
陣列:2020-12 與較早的草案
| 草案 | 前幾個項目的 schema | 其餘項目的 schema |
|---|---|---|
| 2020-12 | prefixItems | items |
| draft-07 與更早版本 | 以陣列形式寫的 items | additionalItems |
本工具兩種寫法都能讀取。在 2020-12 中,items: false 取代了 additionalItems: false。
AI 結構化輸出功能接受什麼
每家廠商都只接受 JSON Schema 的一個子集,而且三家的文件說法各不相同。
| 廠商 | 文件怎麼說 |
|---|---|
| OpenAI | 根必須是物件。每個屬性都必須列在 required 中(選填的值要寫成同時允許 null 的型別),且每個物件都需要 additionalProperties: false。不支援 allOf、not、dependentRequired、dependentSchemas 與 if/then/else。 |
| Anthropic | additionalProperties 必須為 false。不支援遞迴 schema、minimum、maximum 與 multipleOf、minLength 與 maxLength,以及不是 0 或 1 的陣列 minItems。使用了不支援的功能會回傳 400 錯誤。 |
| Google Gemini | 只支援 JSON Schema 的一個子集。minLength、maxLength、minProperties、maxProperties、uniqueItems、contains、minContains 與 maxContains 會被移除並忽略,而不是引發錯誤。 |
通過本驗證工具的 schema,仍可能被廠商的功能拒絕,或只被部分執行。請查閱該廠商的文件,並自行驗證回應。
自行驗證回應
- Google 指出,輸出可能符合 schema,但在含義上仍是錯的,並要求你在應用程式中驗證這些值。
- Anthropic 指出,enum 或 const 的值可能只在大小寫上不同地回傳,且不會產生錯誤。
- OpenAI 指出,拒絕回應不一定遵循 schema,而因最大 token 上限被截斷的回應是不完整的。
- Anthropic 指出,因 max_tokens 而被截斷的回覆,可能不符合 schema。在解析之前,請先確認模型為什麼停止。
資料來源(2026-10-23 確認): JSON Schema 2020-12: Core / JSON Schema 2020-12: Validation / JSON Schema 2020-12: Release notes / OpenAI: Structured Outputs / Anthropic: Structured outputs / Google AI for Developers: Structured output
FAQ
它遵循哪個版本的 JSON Schema?
Draft 2020-12。它也能讀取 draft-07 較舊的陣列寫法,也就是 items 可以是陣列,並由 additionalItems 涵蓋其餘項目。它接受指向同一份 schema 內定義($defs 或 definitions)的 $ref,不會去擷取外部 schema。
它會檢查哪些關鍵字?
type、enum、const、數值與字串的限制、pattern、陣列關鍵字(items、prefixItems、minItems、maxItems、uniqueItems、contains)、物件關鍵字(properties、patternProperties、additionalProperties、required、propertyNames、dependentRequired 等),以及 allOf、anyOf、oneOf、not 和 if/then/else。
它不會檢查什麼?
format、unevaluatedProperties、unevaluatedItems、$dynamicRef 與 contentMediaType 不會檢查。JSON Schema 預設把 format 視為註解,是否檢查屬於選擇性。你的 schema 用到其中任何一個時,本工具都會告知。
為什麼拼錯關鍵字不會出現錯誤?
JSON Schema 把未知的關鍵字視為註解,因此像 requierd 這樣的錯字會被忽略,schema 仍然會通過。對於它認得的關鍵字,若值不對(例如不存在的 type),本工具會回報,但它無法得知你原本想寫的是哪個字。
在這裡通過的 schema,能用在 AI 廠商的結構化輸出嗎?
不一定。每家廠商都只支援 JSON Schema 的一部分。OpenAI 要求所有屬性都列為 required,且 additionalProperties 必須為 false;Anthropic 不支援數值或字串的長度限制;Gemini 會忽略數個關鍵字。請參閱工具下方的各廠商說明。
我的資料會被傳送到伺服器嗎?
不會。schema 與資料都在你的瀏覽器中檢查。