分類: 開發工具
JSON 轉 Zod Schema 工具
不必上傳資料,就能從範例 JSON 產生 Zod schema
貼上 JSON,在瀏覽器裡產生 Zod schema。自動推斷物件、陣列、字串、數字、布林值、可為 null 的值與選填欄位,並複製可直接用於 TypeScript 的結果。不會上傳任何內容。
Zod Schema
import { z } from "zod";
export const userSchema = z.object({
id: z.number(),
name: z.string(),
isActive: z.boolean(),
score: z.null(),
tags: z.array(z.string()),
address: z.object({
city: z.string(),
country: z.string(),
}),
posts: z.array(z.object({
slug: z.string(),
views: z.number(),
pinned: z.boolean().optional(),
})),
});
export type User = z.infer<typeof userSchema>;
只根據這一份樣本推斷:它看得出某個欄位裝的是字串,卻看不出這個字串必須是電子郵件、必須符合最小長度,或必須是幾個允許值之一。請把輸出當成起點,規則由你自己收緊。
本頁的所有處理都在瀏覽器中完成,不會上傳任何內容。
本頁的所有處理都在瀏覽器中完成,不會上傳任何內容。
這個工具能做什麼
這個工具在本機讀取 JSON 樣本,草擬出對應的 Zod 物件 schema,包含巢狀物件、陣列與聯集型別。當陣列裡的物件彼此不一致時——某個元素有 `pinned` 欄位而下一個沒有——該鍵會被標記為 `.optional()`,而不是被悄悄丟掉,因為這種不一致往往正是你最需要注意到的地方。有時為 null 的值會變成 `.nullable()`,而不是一個兩成員的聯集。它做不到的,是憑空造出沒見過的規則:樣本資料只能說明某個欄位裝的是字串,說明不了這個字串必須是電子郵件、必須短於 80 個字元,或必須是三個允許值之一。輸出是一副等你收緊的骨架,而不是一份寫好的契約。
使用方式
- 貼上一份具代表性的 JSON 樣本——涵蓋的變化越多,推斷就越準。
- 為 schema 命名,並選擇是否包含 zod 匯入敘述與推斷出的型別。
- 複製產生的程式碼,再自行補上樣本無法呈現的欄位規則。
隱私說明
本工具完全在你的瀏覽器中執行。輸入的內容不會被上傳、儲存或分享,關閉分頁就隨之消失。
常見問題
- 我的 JSON 會被上傳嗎?
- 不會。解析 JSON 與產生 schema 全都在瀏覽器分頁內完成;輸入與輸出都不會送到伺服器,也不會被記錄或保存。
- 推斷出來的驗證有多準確?
- 跟你的樣本一樣準。它能忠實還原結構與型別,但無法得知結構表達不出的限制——格式、數值範圍、列舉,或在正式環境中哪些欄位才真的必填。信任它之前,請逐一複核每個欄位。
- 它支援陣列與選填欄位嗎?
- 支援。陣列會變成 z.array(...);當陣列裡的物件鍵不一致時,並非處處都有的鍵會被標記為 .optional()。有時為 null 的欄位會變成 .nullable()。
- 產生的結果能在 TypeScript 裡使用嗎?
- 可以。產生的檔案會匯出 schema;若保留該選項,還會匯出一個 `z.infer` 型別別名,於是驗證器與相符的靜態型別都來自同一處定義。