JSON sang kiểu dữ liệu API

Sinh interface TypeScript, schema Zod, JSON Schema 2020-12, struct Go, dataclass Python hoặc model Pydantic từ một hay nhiều mẫu JSON.

POSThttps://apibox.io.vn/v1/json-to-types
Tiện ích lập trình▶ Dùng thử online

Dán mẫu JSON vào json (hoặc nhiều mẫu trong samples) và chọn lang: typescript, zod, json-schema, go, python (dataclass), pydantic (v2), danh sách cách nhau bằng dấu phẩy hoặc all. Các mẫu được gộp theo từng trường: trường thiếu ở một số object trở thành tuỳ chọn, nhiều kiểu khác nhau thành union, null khiến trường có thể null, số nguyên và số thập phân gộp thành number; mảng object ở cấp ngoài cùng được hiểu là danh sách bản ghi cùng một kiểu.

Object lồng nhau có kiểu riêng đặt theo tên khoá (phần tử mảng được đổi sang số ít: items → Item, addresses → Address), các object cùng cấu trúc dùng chung một kiểu, chuỗi được gắn định dạng khi mọi mẫu đều khớp: date-time RFC 3339 (→ time.Time, datetime, z.string().datetime()), ngày, giờ, UUID, e-mail, URL. Với enums=true, trường chuỗi ngắn có giá trị lặp lại thành union literal / enum. Khoá không hợp lệ làm tên biến được đặt trong ngoặc kép (TypeScript, Zod), gắn tag (Go json:"…") hoặc alias (Pydantic Field(alias=…)).

Bộ sinh mã do chúng tôi tự viết (không dùng quicktype): tối đa 100 mẫu, 200.000 giá trị và 64 cấp lồng nhau. code chứa ngôn ngữ đầu tiên, output chứa mọi ngôn ngữ đã chọn. Mã Python dùng cú pháp X | None (Python 3.10 trở lên).

Tham số

TênVị tríKiểuBắt buộcMặc định
jsonbodyobjectkhôngMột mẫu JSON (giá trị JSON bất kỳ hoặc chuỗi JSON).
samplesbodyarraykhôngNhiều mẫu của cùng một kiểu (tối đa 100), được gộp lại.
langbodystringkhôngtypescripttypescript, zod, json-schema, go, python, pydantic, danh sách cách nhau bằng dấu phẩy hoặc all.
namebodystringkhôngRootTên kiểu gốc.
detect_datesbodybooleankhôngtrueNhận diện chuỗi ngày giờ / ngày / giờ.
enumsbodybooleankhôngfalseBiến các giá trị chuỗi ngắn lặp lại thành union literal / enum.

Ví dụ

curl -X POST "https://apibox.io.vn/v1/json-to-types" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"json":{"id":1,"name":"An","created_at":"2026-11-10T08:30:00Z","tags":["vip"],"address":{"city":"Hà Nội","zip":null}},"lang":"typescript","name":"Customer"}'

Kết quả trả về

{
  "root": "Customer",
  "samples": 1,
  "types": [
    "Customer",
    "Address"
  ],
  "languages": [
    "typescript"
  ],
  "code": "export interface Customer {\n  id: number;\n  name: string;\n  /** format: date-time */\n  created_at: string;\n  tags: string[];\n  address: Address;\n}\n\nexport interface Address {\n  city: string;\n  zip: null;\n}\n",
  "output": {
    "typescript": "(same as code)"
  }
}

Ứng dụng

  • Tạo kiểu cho response API trước khi viết client
  • Tạo bộ kiểm tra Zod hoặc Pydantic từ payload mẫu
  • Viết JSON Schema cho webhook từ các sự kiện thật
  • Sinh struct Go cho API JSON của bên thứ ba

Hỏi đáp

Làm sao để đánh dấu trường tuỳ chọn?

Gửi nhiều mẫu trong "samples": trường vắng mặt ở một số mẫu sẽ thành tuỳ chọn (?, .optional(), con trỏ + omitempty, = None).

Mã Zod dùng phiên bản nào?

Cú pháp Zod 3 (z.string().datetime(), .email(), .uuid()), vẫn chạy được trên Zod 4.

Ngày giờ có được nhận diện không?

Có, với chuỗi là date-time RFC 3339 hoặc ngày YYYY-MM-DD ở mọi mẫu; đặt detect_dates=false để giữ là chuỗi thường.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →