Chuyển đến nội dung

Chuyển đổi JSON sang lược đồ Zod

Tạo lược đồ Zod từ mẫu JSON bằng thư viện json-to-zod. Mỗi giá trị được ánh xạ sang z.string(), z.number(), z.boolean(), z.null() hoặc z.object() lồng nhau; mảng rỗng trở thành z.array(z.unknown()).

Phác thảo bộ kiểm tra dữ liệu khi chạy cho phản hồi API mà bạn chỉ có dữ liệu mẫu.

JSON

Zod Schema

Khi nào nên sử dụng

  • Phác thảo bộ kiểm tra dữ liệu khi chạy cho phản hồi API mà bạn chỉ có dữ liệu mẫu.
  • Thêm chức năng kiểm tra bằng Zod cho biểu mẫu hoặc bộ tải cấu hình mà không cần viết lược đồ thủ công.

Cách sử dụng

  1. Dán một mẫu JSON có tính đại diện vào trình soạn thảo bên trái.
  2. Mở cài đặt và đặt Tên lược đồ gốc nếu bạn muốn dùng tên khác schema.
  3. Sao chép mã, rồi bổ sung ràng buộc chặt chẽ hơn: thêm .optional(), .email(), .min() và các quy tắc tương tự theo đặc tả thực tế của bạn.

Mẫu JSON

{
  "id": 42,
  "email": "ada@example.com",
  "roles": ["admin", "editor"],
  "profile": { "nickname": null, "verified": true },
  "tags": []
}

Lược đồ Zod (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()),
})

Chi tiết và giới hạn

Quá trình tạo mã chạy trong trình duyệt; thư viện được tải khi cần.

Kiểu được suy luận từ một mẫu duy nhất. null chỉ trở thành z.null(), không phải .nullable(), và các khóa bị thiếu không bao giờ được đánh dấu là không bắt buộc.

Mảng có phần tử mang cấu trúc khác nhau trở thành z.union([...]) của từng cấu trúc, có thể cần tự hợp nhất lại.

Các định dạng như email, ngày hoặc UUID không được nhận diện; tất cả đều là z.string().

FAQ

Tôi có thể chuyển đổi mảng JSON ở cấp gốc không?

Có. Mảng gốc trở thành z.array(...). Nếu các đối tượng có khóa khác nhau, mỗi đối tượng có cấu trúc riêng sẽ trở thành một thành viên của z.union.

Các giá trị null được gán kiểu như thế nào?

Chúng có kiểu z.null(), chỉ chấp nhận null. Nếu trường cũng có thể chứa chuỗi, hãy đổi thành z.string().nullable().

Công cụ có thêm .optional() cho các trường bị thiếu không?

Không. Mọi khóa trong mẫu đều bắt buộc. Bạn cần tự đánh dấu các trường không bắt buộc.

Đặc tả và tài liệu tham khảo