>_toolkitbox

~/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 文件中是哪個屬性違反了規則

使用方法

  1. 將 schema 貼在左側、JSON 資料貼在右側,或載入範例。
  2. 查看結果:若通過會顯示通過,否則會列出問題,包含資料中的路徑與未通過的規則。
  3. 若出現「未驗證的關鍵字」提示,請一併確認。

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-12prefixItemsitems
draft-07 與更早版本以陣列形式寫的 itemsadditionalItems

本工具兩種寫法都能讀取。在 2020-12 中,items: false 取代了 additionalItems: false。

AI 結構化輸出功能接受什麼

每家廠商都只接受 JSON Schema 的一個子集,而且三家的文件說法各不相同。

廠商文件怎麼說
OpenAI根必須是物件。每個屬性都必須列在 required 中(選填的值要寫成同時允許 null 的型別),且每個物件都需要 additionalProperties: false。不支援 allOf、not、dependentRequired、dependentSchemas 與 if/then/else。
AnthropicadditionalProperties 必須為 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 與資料都在你的瀏覽器中檢查。

相關工具