實用工具
輸入
結果
結果會顯示在這裡。TypeScript 型別在編譯時就消失了;Zod schema 則在回應真正抵達時依然存在,而 z.infer 能把它轉回型別。這裡使用 quicktype 的 typescript-zod 產生器,從樣本產生 schema。輸出依照第 4 版建議的方式匯入 zod,也就是 import * as z from "zod",每種物件結構宣告一個 schema,並在每個 schema 旁匯出推斷出的型別。我們的測試會在 zod 4 下執行產生的程式碼,並確認它能接受產生它的那份樣本——這是產生出來的 schema 最起碼該做到的事。
它是怎麼運作的
- 在陣列部分元素中缺少的鍵會變成 .optional();有時為 null 的鍵會變成與 z.null() 的聯集。
- schema 依相依順序輸出,因此每個巢狀 schema 都會宣告在使用它的物件 schema 之前。
- 日期偵測會把 ISO 時間戳記轉成 z.coerce.date(),將字串解析為 Date;關閉則保留 z.string()。
- 這些 schema 都是一般的 z.object 呼叫,所以解析時會移除未知的鍵;若需要其他行為,請手動改用 z.strictObject 或 z.looseObject。
你的資料去了哪裡
哪也沒去。本工具完全在你的瀏覽器裡執行:你貼上的文字由頁面處理,不會傳輸到任何伺服器,也不會寫進任何紀錄。
本工具免費且免登入,執行結果只存在於你目前的頁面裡,不會被儲存到任何地方。
它要花多少
本工具完全免費,不需要登入,也不消耗點數。
常見問題
- 輸出也能用在 Zod 3 嗎?
- 可以。它用到的呼叫——z.object、z.array、z.union、z.null、.optional() 和 z.coerce.date()——在兩個主要版本中都存在,命名空間匯入的寫法在 3.x 也能使用。兩個版本之間的差異在於錯誤格式和部分進階 API,而產生的程式碼都沒有用到。
- 為什麼頂層 schema 是另一個 schema 的陣列?
- 因為樣本本身是陣列。元素的結構有自己的 schema——GitHub 範例資料中是 RepoElementSchema——頂層名稱則用在陣列上,所以同一個檔案既能驗證單一項目,也能驗證整個清單。
- 產生的 schema 有多嚴格?
- 和樣本完全一樣嚴格,也就是不太嚴格。字串欄位接受任何字串,而不只是你貼上的那些值;數字不論是否為整數都是 z.number()。之後在 API 合約能說明得比一份樣本更多的地方,用 .int()、z.url()、z.email() 或 z.enum() 加以收緊。
背後的開源專案
本工具執行在 glideapps/quicktype 之上,以 Apache-2.0 授權發布。如果你需要在自己的程式裡實作同樣的能力,直接用這個函式庫。
glideapps/quicktype也常被稱作
- json 轉 zod
- zod schema 產生器
- json 產生 zod schema
- json to zod 線上
- zod v4 schema
- typescript 執行階段驗證