Trình tạo struct JSON sang TypeScript / Go / Rust
Dán JSON, chọn ngôn ngữ đích, nhận định nghĩa kiểu mạch lạc. Hỗ trợ TypeScript, Go, Rust, Kotlin, Java, C# và Python TypedDict. Dựa trên quicktype, chạy trong trình duyệt.
- Dán mẫu JSON đại diện vào vùng văn bản bên trái.
- Chọn ngôn ngữ đích từ danh sách thả xuống Mục tiêu.
- Bấm Tạo. Lần bấm đầu tiên tải engine (~2–3 giây trên kết nối 4G); các lần tạo sau là tức thì.
- Sao chép kết quả, hoặc tải xuống với phần mở rộng tệp đúng.
Công cụ này làm gì?
Tạo các kiểu mạch lạc trong ngôn ngữ đích bằng cách suy ra schema từ một hoặc nhiều mẫu JSON. Kiểu trường được suy luận — chuỗi vẫn là chuỗi, số trở thành kiểu số của ngôn ngữ, boolean trở thành bool, mảng trở thành slices/lists/arrays, đối tượng lồng trở thành kiểu lồng. Trường tùy chọn (những trường đôi khi null hoặc thiếu giữa các mẫu) được đánh dấu là nullable trong đầu ra. Được hỗ trợ bởi quicktype-core, cùng engine đứng sau quicktype.io.
Ví dụ
Đầu vào JSON:
{
"name": "Ada",
"age": 36,
"active": true,
"tags": ["math", "logic"]
} Đầu ra TypeScript (mục tiêu = TypeScript, tên kiểu = User):
export interface User {
name: string;
age: number;
active: boolean;
tags: string[];
} Cạm bẫy thường gặp và cách xử lý
Suy luận kiểu từ JSON có giới hạn cơ bản — JSON không mang đủ thông tin để hạn chế hoàn toàn một hệ kiểu. Các mẫu dưới đây bao gồm trường hợp kiểu được suy luận có thể không khớp với những gì bạn muốn.
- Tùy chọn vs. bắt buộc từ một mẫu duy nhất. Một đối tượng JSON đơn không thể cho trình tạo biết trường nào tùy chọn. Cung cấp nhiều mẫu (dán mảng JSON các đối tượng đại diện) để trình tạo có thể đánh dấu các trường đôi khi vắng mặt là tùy chọn.
- Mảng rỗng. `{"items": []}` tạo ra mảng `any` — trình tạo không có phần tử để suy luận. Bao gồm ít nhất một ví dụ có dữ liệu, hoặc sửa kiểu thủ công sau khi tạo.
- Phần tử mảng không đồng nhất. Mảng JSON `[1, "two"]` trở thành kiểu union — kết quả có thể không tiện dụng trong một số ngôn ngữ đích (đặc biệt Go). Nếu mảng phải đồng nhất trong dữ liệu thực của bạn, sửa mẫu.
- Chuỗi ngày. JSON không có kiểu Date. Chuỗi ngày ISO 8601 được suy luận là `string`. quicktype đôi khi có thể phát hiện chúng là Date trong đầu ra TypeScript — điều chỉnh thủ công nếu bạn muốn định kiểu mạnh hơn.
- ID số mất độ chính xác. Số JSON > 2^53 (ID 64-bit lớn) mất độ chính xác khi được phân tích bởi JavaScript. Kiểu TypeScript được tạo vẫn dùng `number`. Để có độ chính xác 64-bit, dùng `string` trong JSON của bạn hoặc chuyển sang kiểu `bigint` thủ công.
- Trường có gạch dưới vs. camelCase. Trình tạo giữ nguyên cách đặt tên trường JSON. Nếu JSON của bạn dùng snake_case nhưng ngôn ngữ đích mong đợi camelCase, đầu ra dùng trường snake_case với chú thích serde/json khi áp dụng. Ghi đè bằng hậu xử lý hoặc dùng cờ CLI quicktype.
Câu hỏi thường gặp
Tại sao Tạo lần đầu tiên chậm?
Bundle engine quicktype khoảng 465 KB gzipped. Nó tải vào lần bấm Tạo đầu tiên, mất 2–3 giây trên kết nối 4G. Sau đó module được cache cho phần còn lại của phiên trang — và trình duyệt cache giữa các lượt truy cập, vì vậy các lần bấm đầu tiên tiếp theo cũng tức thì trừ khi cache đã bị xóa.
Tôi có thể tạo từ nhiều mẫu JSON không?
Bao mẫu của bạn trong mảng JSON và dán mảng đó. Trình tạo suy ra hợp của các trường thấy giữa các mẫu và đánh dấu các trường là tùy chọn khi chúng vắng mặt từ ít nhất một. Đây là cách đúng để đảm bảo các kiểu được tạo của bạn dung nạp biến thể trong dữ liệu thực.
Tôi nên chọn ngôn ngữ nào cho mã backend?
Khớp với những gì dự án của bạn đã sử dụng. Đầu ra Go dùng struct tags chuẩn cho `encoding/json`. Rust dùng serde derives. Kotlin dùng chú thích kotlinx.serialization. Java tạo POJO tương thích với Jackson. Lựa chọn dựa trên dự án, không dựa trên sở thích.
Bình luận trường có được giữ không?
JSON không có cú pháp bình luận, nên không có bình luận trong đầu vào để mang theo. quicktype có thể bao gồm doc comments trong đầu ra cho một số ngôn ngữ — đây là mô tả được tạo tự động, không phải nội dung của người dùng.
JSON của tôi có được tải lên không?
Không. Mọi thứ chạy trong trình duyệt của bạn — đầu vào của bạn được xử lý cục bộ bởi module JavaScript quicktype-core trên trang này. quicktype-core tự nó tải từ cùng origin (host tài sản tĩnh của trang này); không máy chủ bên thứ ba nào thấy dữ liệu của bạn.
Tôi có thể dùng mẫu JSON lớn cỡ nào?
Đến khoảng 5 MB JSON trước khi trình tạo bắt đầu mất thời gian đáng kể. Trình tạo được thiết kế cho mẫu đại diện, không phải bộ dữ liệu đầy đủ — thường một số ít đối tượng đủ để suy ra schema sạch.