實用工具

JSON 轉 Zod schema

從範例 JSON 產生 Zod schema,讓同一份結構既能在執行階段檢查,又能推斷出 TypeScript 型別。

瀏覽器本機執行程式碼轉換1.4萬
免費

輸入

0 B

結果

結果會顯示在這裡。

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 執行階段驗證