跳至主要內容
Lizely

JSON 資料結構產生器

從樣本結構推匯出 Draft 2020-12 JSON Schema,包含必要欄位、可空值、陣列、混合型別與明確的不確定性。

隱私權:你的檔案不會離開裝置,所有處理均在瀏覽器本機完成。

使用方式

  1. 1.貼上代表性嚴謹的 JSON,並可選擇輸入簡潔的 Schema 標題。
  2. 2.產生並檢視必要欄位、可空性、陣列項目、anyOf 分支與開放物件行為。
  3. 3.複製 Schema 並使用具 Draft 2020-12 能力的生產環境驗證器測試正向與負向例項。

關於JSON 資料結構產生器

JSON Schema Generator 可將一個嚴謹的 JSON 值轉換為可讀的結構化 Schema,宣告 Draft 2020-12 語言。貼上代表性樣本,可選加入標題,產生、檢視並複製。解析與推導皆發生於當前標籤內,頁面不會上傳資料、執行驗證器,或與 Schema 註冊服務通訊。

JSON 字串、安全整數、其他數字、布林值和 null 會對應到 JSON Schema 型別。陣列使用從每個觀察到的元素推斷出的項目。空陣列會產生一個空的項目 schema,因為無法證明任何元素限制。相容的數字會將整數擴充套件為數字,而不相容的觀察型別則會成為確定的 anyOf 分支。

物件會產生 type object、properties 與 required。每一個在所有合併物件樣本中出現的屬性會被標記為 required。至少一個物件中缺失的屬性將不會出現在 required 中。屬性名稱會完全保留,包括標點符號與原型形的拼寫。生成器有意保留 additionalProperties,讓物件保持開放,因為單一樣本無法證明未觀察到的鍵是被禁止的。

Null 與直接型別的 schema 結合時,會將 null 加入型別陣列,同時保留屬性或項目。更複雜的組合使用 anyOf。巢狀物件和陣列會遞迴推斷。重複的等價分支會被移除,輸出順序是確定的,因此相同的輸入會產生適合審閱和版本控制的穩定文字。

這是一種結構樣本推導,而非 Schema 發現。生成器不會猜測格式、模式、列舉、const、minimum、maximum、multipleOf、長度、唯一性、描述、預設值、範例、廢除、readOnly、writeOnly、內容編碼、參考、錨點、ID、條件邏輯、未評估屬性或業務意義。僅從權威需求中新增這些內容。

URI 語言必須由 https://json-schema.org/draft/2020-12/schema. 驗證器明確支援,且格式僅能以註解方式提供,除非選擇的實作支援斷言行為。請使用與生產環境完全相同的驗證器、設定與詞彙來測試複製的 Schema,而非假設所有庫對每個關鍵字的解釋都一致。

嚴謹的 JSON 是必需的,因此註解、尾隨逗點、NaN、Infinity、undefined、BigInt 與 JavaScript 字面值會失敗。JavaScript 會在推導前解析樣本數值;僅安全整數會轉為整數,避免對較大值的四捨五入產生錯誤的精確性判斷。對精確度敏感的十進位數值與識別碼可能需要以字串形式處理,並搭配應用層驗證。

限制為 500,000 輸入字元、50,000 值、40 巢狀層級與 1,000,000 輸出字元。邊界錯誤將不會產生部分 Schema。八個外部測試案例涵蓋所有基本型別、空陣列與帶型別的陣列,以及合併物件的必要欄位。額外測試涵蓋可空項目、混合 anyOf 陣列、特殊屬性名稱與錯誤的 JSON。在發布前必須驗證接受與拒絕的例項。

方法與來源

解析嚴謹的 JSON,遞迴地將觀察到的原始值、陣列與物件轉換為 Draft 2020-12 關鍵字,將物件存在性合併至 required,將整數擴充套件為數值,將不相容的證據以 anyOf 形式表示,保留可空性,不指定 additionalProperties,並在錯誤時拒絕而非截斷。

常見問題

為何沒有 additionalProperties?
單一樣本無法證明未觀察到的鍵是被禁止的。產生的物件將保持開放,直到你的權威合約另有說明。
為何沒有推導格式與列舉?
拼寫或小樣本不足以作為語意約束的證據。請從文件需求中手動新增。
Draft 2020-12 是否保證格式驗證?
沒有。格式可能僅以註解方式提供,取決於詞彙與驗證器設定。請確認你部署的實作內容。

開發者工具 使用指南

查看全部