跳到主要內容

嚴格驗證: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 響應起草執行時校驗器。

JSON

Zod Schema

適用場景

  • 為只有示例資料的 API 響應起草執行時校驗器。
  • 無需手寫 schema,就能為表單或配置載入器加上 Zod 校驗。

使用方法

  1. 將有代表性的 JSON 示例貼上到左側編輯器。
  2. 如果不想用 schema 作為名稱,開啟設定並修改 Root Schema Name。
  3. 複製程式碼後再收緊規則:根據實際規範新增 .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() 嗎?

不會。示例中的每個鍵都是必填的。可選欄位請自行標記。

規範與參考資料