JSON Schema 驗證器

根據 JSON Schema 定義驗證 JSON 資料。取得包含路徑的詳細錯誤報告。所有處理均在您的瀏覽器中完成。

即時驗證 錯誤詳情 客戶端處理

如何使用 JSON Schema 驗證器

1

輸入 Schema

定義描述預期結構的 JSON Schema。

2

輸入資料

貼上您要根據 Schema 驗證的 JSON 資料。

3

驗證

點擊「驗證」並檢視結果是否有任何錯誤。

什麼是 JSON Schema?

JSON Schema 是一種詞彙表,允許您標註與驗證 JSON 文件。它為特定應用程式所需的 JSON 資料以及如何與其互動提供了合約。JSON Schema 用於驗證、文件撰寫與產生模擬資料。

主要功能

型別驗證

驗證型別:string、number、integer、boolean、array、object、null

約束條件

最小/最大長度、範圍、模式、必填欄位等

結構定義

定義巢狀物件、陣列與複雜資料結構

常見問題

支援哪個版本的 JSON Schema?

本工具透過 Ajv 函式庫支援 JSON Schema Draft-07、Draft 2019-09 與 Draft 2020-12。支援大多數常見的 Schema 功能。

可以驗證巢狀物件嗎?

可以!JSON Schema 支援深層巢狀的物件與陣列。您可以在任何巢狀層級定義 properties 與 items,並為每個欄位設定個別的驗證規則。

如果我的 Schema 無效會怎樣?

本工具會先驗證您的 Schema 本身是否為有效的 JSON Schema。如果 Schema 有錯誤,這些錯誤會在嘗試驗證資料之前被回報。

哪些 JSON Schema 關鍵字最常用?

type(string、number、object、array、boolean、null)、包含巢狀 Schema 的 properties、列出必填鍵值的 required、用於固定值集合的 enum、以正規表示式約束字串的 pattern,以及範圍檢查 minimum/maximum 與 minLength/maxLength。additionalProperties: false 會收緊物件,禁止出現額外的鍵值。這些關鍵字合起來涵蓋了大部分的 API 驗證規則。

format 關鍵字(例如 date-time 和 email)的行為如何?

在現代 JSON Schema 中,format 預設是註解而非自動斷言——驗證器只有在明確設定的情況下才會強制檢查,2020-12 規範透過獨立的 format-assertion 詞彙表明確了這一點。若必須保證強制執行,請使用 pattern 或自訂關鍵字,否則可將 format 視為互通性中繼資料。

$ref 是什麼?Schema 重複使用如何運作?

指向 #/$defs/address 的 $ref 會參照 $defs 底下的 Schema 片段,並在所有使用處依該片段進行驗證——這就是去重複機制。Draft 2020-12 將舊的 definitions 更名為 $defs,並為留言串之類的遞迴結構正式制定 $dynamicRef。參照也可以指向外部文件,但更常見的做法是將其打包在本地。

oneOf、anyOf 和 allOf 有何不同?

allOf 要求每個子 Schema 都必須通過驗證——也就是交集,用於在基礎 Schema 上附加額外約束。anyOf 要求至少一個通過——也就是聯集,用於多型酬載。oneOf 則要求恰好一個通過;若兩個或零個子 Schema 通過驗證即為失敗,這比大多數人預期的更嚴格,也是 Schema 彼此重疊時出現意外錯誤的常見原因。

draft-07 與 2020-12 之間有哪些變更?

2020-12 將規範拆分為可個別協商的詞彙表(validation、annotation、format-assertion)、將 definitions 更名為 $defs、將 exclusiveMinimum 簡化為單純數值,並以 prefixItems 加上 items 取代舊的 items 關鍵字。大多數工具兩者皆支援;draft-07 仍是部署最廣泛的版本,但 2020-12 才是現行發布的標準。

{-- * External Resources Component(#18 Phase 3b 内容佐证工程) * 工具页「权威引用」区块:RFC / W3C / WHATWG / ECMA / IANA / 官方规范站 / Wikipedia。 * * - 接受 :slug 属性 → 经 config/tool-sources.php 家族矩阵渲染该工具的权威引用 * - slug 未命中映射时不渲染(无权威来源的工具静默跳过) * - 链接 title 保持英文(引用源专名);description 经 * common.resources.descriptions.{key} 本地化,lang 未命中回退英文(线上不裸奔) * - 链接保持 dofollow(rel="noopener noreferrer") * * @param string|null $slug --}}