嚴格驗證:JSON To Zod Schema
使用 json-to-zod 庫根據 JSON 示例生成 Zod schema。每個值對應 z.string()、z.number()、z.boolean()、z.null() 或巢狀的 z.object();空陣列變為 z.array(z.unknown())。
為只有示例資料的 API 響應起草執行時校驗器。
適用場景
- 為只有示例資料的 API 響應起草執行時校驗器。
- 無需手寫 schema,就能為表單或配置載入器加上 Zod 校驗。
使用方法
- 將有代表性的 JSON 示例貼上到左側編輯器。
- 如果不想用 schema 作為名稱,開啟設定並修改 Root Schema Name。
- 複製程式碼後再收緊規則:根據實際規範新增 .optional()、.email()、.min() 等。
JSON 示例
{
"id": 42,
"email": "ada@example.com",
"roles": ["admin", "editor"],
"profile": { "nickname": null, "verified": true },
"tags": []
}Zod schema(TypeScript)
import { z } from "zod"
export const schema = z.object({
id: z.number(),
email: z.string(),
roles: z.array(z.string()),
profile: z.object({ nickname: z.null(), verified: z.boolean() }),
tags: z.array(z.unknown()),
})功能與限制
生成在瀏覽器中進行;庫按需載入。
型別來自單個示例。null 只會變為 z.null(),不會變為 .nullable(),缺失的鍵也不會被標記為可選。
元素結構不同的陣列會變為由各結構組成的 z.union([...]),可能需要手動合併。
不會識別 email、日期或 UUID 等格式,它們都會是 z.string()。
FAQ
能轉換根節點為陣列的 JSON 嗎?
可以。根陣列會變為 z.array(...)。如果其中的物件鍵不同,每種不同的物件都會成為 z.union 的一個成員。
null 值是什麼型別?
z.null(),只接受 null。如果欄位也可能是字串,請改為 z.string().nullable()。
會為缺失欄位新增 .optional() 嗎?
不會。示例中的每個鍵都是必填的。可選欄位請自行標記。