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.
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ên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
json | body | object | không | Một mẫu JSON (giá trị JSON bất kỳ hoặc chuỗi JSON). | |
samples | body | array | không | Nhiều mẫu của cùng một kiểu (tối đa 100), được gộp lại. | |
lang | body | string | không | typescript | typescript, zod, json-schema, go, python, pydantic, danh sách cách nhau bằng dấu phẩy hoặc all. |
name | body | string | không | Root | Tên kiểu gốc. |
detect_dates | body | boolean | không | true | Nhận diện chuỗi ngày giờ / ngày / giờ. |
enums | body | boolean | không | false | Biế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"}'const res = await fetch('https://apibox.io.vn/v1/json-to-types', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"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"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/json-to-types",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"json": {"id": 1, "name": "An", "created_at": "2026-11-10T08:30:00Z", "tags": ["vip"], "address": {"city": "Hà Nội", "zip": None}}, "lang": "typescript", "name": "Customer"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/json-to-types');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"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"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));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
Tạo UUID
Sinh tối đa 1.000 UUID v4, UUID v7 theo thời gian, ULID, Nano ID hoặc mã hex ngẫu nhiên mỗi request. Ngẫu nhiên an toàn, hỗ trợ chữ in hoa.
⏱Phân tích biểu thức cron
Kiểm tra biểu thức cron và xem các lần chạy tiếp theo theo múi giờ bất kỳ, kèm mô tả dễ hiểu. Hỗ trợ cú pháp cron 5, 6 và 7 trường.
🕒Giờ & múi giờ
Lấy giờ hiện tại ở mọi múi giờ, đổi giữa các múi giờ và Unix timestamp (giây hoặc mili giây), kèm độ lệch UTC và thứ trong tuần cho tối đa 30 múi giờ.