分類: 開發工具

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 個字元,或必須是三個允許值之一。輸出是一副等你收緊的骨架,而不是一份寫好的契約。

使用方式

  1. 貼上一份具代表性的 JSON 樣本——涵蓋的變化越多,推斷就越準。
  2. 為 schema 命名,並選擇是否包含 zod 匯入敘述與推斷出的型別。
  3. 複製產生的程式碼,再自行補上樣本無法呈現的欄位規則。

隱私說明

本工具完全在你的瀏覽器中執行。輸入的內容不會被上傳、儲存或分享,關閉分頁就隨之消失。

常見問題

我的 JSON 會被上傳嗎?
不會。解析 JSON 與產生 schema 全都在瀏覽器分頁內完成;輸入與輸出都不會送到伺服器,也不會被記錄或保存。
推斷出來的驗證有多準確?
跟你的樣本一樣準。它能忠實還原結構與型別,但無法得知結構表達不出的限制——格式、數值範圍、列舉,或在正式環境中哪些欄位才真的必填。信任它之前,請逐一複核每個欄位。
它支援陣列與選填欄位嗎?
支援。陣列會變成 z.array(...);當陣列裡的物件鍵不一致時,並非處處都有的鍵會被標記為 .optional()。有時為 null 的欄位會變成 .nullable()。
產生的結果能在 TypeScript 裡使用嗎?
可以。產生的檔案會匯出 schema;若保留該選項,還會匯出一個 `z.infer` 型別別名,於是驗證器與相符的靜態型別都來自同一處定義。