Chuyển đến nội dung

Chuyển JSON sang TypeScript, Go, Python và nhiều ngôn ngữ khác

Dán mẫu JSON để tạo interface TypeScript, schema Zod, struct Go và kiểu dữ liệu Python, Java, C#, Kotlin, Swift, Rust ngay trên trình duyệt.

Nhiều mẫu (nối tiếp nhau hoặc JSON Lines) và các đối tượng trong mảng sẽ được gộp lại: khóa thiếu ở đâu đó trở thành tùy chọn, giá trị null có thể nhận null.

TypeScript
Dán mẫu rồi nhấn Tạo kiểu.
Khai báo dưới dạng
Chạy ngay trên trình duyệt · không cần tải lênCách hoạt động

Cách sử dụng JSON sang kiểu dữ liệu

  1. 1

    Dán mẫu JSON

    Dán một phản hồi, một mảng bản ghi hoặc nhiều phản hồi liên tiếp; mẫu có sẵn là hai người dùng đã được gộp.

  2. 2

    Chọn ngôn ngữ

    Chọn TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift hoặc Rust, rồi chọn các tùy chọn kiểu cho ngôn ngữ đó.

  3. 3

    Đặt tên kiểu gốc

    Nhập tên của kiểu ngoài cùng, ví dụ User hoặc OrderResponse.

  4. 4

    Tạo và sao chép

    Nhấn Tạo kiểu, sau đó sao chép mã hoặc tải xuống; khi bạn chỉnh sửa, mã sẽ tự tạo lại.

Giới hạn và Pro

Miễn phí, không cần đăng ký: 9 ngôn ngữ đầu ra với 3 kiểu Python, gộp số mẫu tùy ý và tệp đến 20 MB, quá trình tạo dừng sau 30 giây.

Pro gỡ quảng cáo; trình tạo giống nhau ở mọi gói. Xem Pro

Về JSON sang kiểu dữ liệu

Viết kiểu dữ liệu bằng tay cho phản hồi API vừa chậm vừa dễ sai, nhất là khi dữ liệu lồng nhau ba cấp. Dán một hoặc nhiều mẫu JSON, trình tạo sẽ suy ra cấu trúc và viết sẵn định nghĩa để bạn dán vào mã, với chín lựa chọn: interface hoặc type alias của TypeScript, TypeScript kèm schema Zod để kiểm tra dữ liệu khi chạy, struct Go có json tag, dataclass, TypedDict hoặc mô hình Pydantic v2 của Python, record Java có chú thích Jackson, lớp C# cho System.Text.Json, data class Kotlin cho kotlinx.serialization, struct Codable của Swift và struct Rust cho serde.

Một mẫu hiếm khi có đủ mọi trường, nên trình tạo gộp tất cả các mẫu bạn đưa vào. Bạn có thể dán nhiều tài liệu liên tiếp, dùng JSON Lines hoặc một mảng đối tượng: khóa thiếu ở một số đối tượng sẽ thành tùy chọn, khóa đôi khi là null sẽ cho phép null, số nguyên đôi khi là số thập phân sẽ thành float, còn giá trị thực sự lẫn lộn sẽ thành union hoặc kiểu JSON động của ngôn ngữ đó. Đối tượng lồng nhau có kiểu riêng với tên riêng – orders thành Order, addresses thành Address – và các cấu trúc giống hệt nhau chỉ được tạo một lần rồi dùng lại. Đối tượng có khóa là số, UUID hoặc ngày sẽ được chuyển thành map.

Tên trường được đổi theo quy ước của từng ngôn ngữ, còn khóa JSON khác đi, như first-name hay class, được ánh xạ ngược bằng chú thích, alias hoặc CodingKeys phù hợp. Chú thích và dấu phẩy thừa ở cuối trong mẫu vẫn được chấp nhận.

Kết quả chỉ mô tả các mẫu bạn đưa vào; trình tạo không thể biết những trường hay giá trị mà mẫu không có, nên hãy đối chiếu với tài liệu API trước khi dùng.

Quyền riêng tư

Mẫu được phân tích và mã được tạo bởi một Web Worker ngay trong tab này, nên phản hồi API chứa dữ liệu cá nhân hoặc nội bộ không bao giờ được tải lên. Tùy chọn ngôn ngữ và cách đặt tên được lưu trong bộ nhớ cục bộ; JSON bạn dán thì không được lưu lại.

Tính năng

Gộp nhiều mẫu

Khóa bị thiếu thành tùy chọn và giá trị null cho phép null, tính trên mọi mẫu bạn dán.

9 ngôn ngữ

TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift và Rust với cách đặt tên đúng chuẩn từng ngôn ngữ.

Có sẵn ánh xạ khóa

json tag, alias, @SerialName, @JsonProperty và CodingKeys giữ nguyên tên JSON gốc.

JSON sang kiểu dữ liệu: câu hỏi thường gặp

Trường tùy chọn được xác định như thế nào?
Một trường là tùy chọn khi có ít nhất một đối tượng ở cùng vị trí không chứa khóa đó. Nếu chỉ dán một đối tượng, mọi trường đều bắt buộc vì không có gì cho thấy điều ngược lại. Hãy dán nhiều phản hồi thực tế hoặc một mảng bản ghi để trình tạo thấy khóa nào lúc có lúc không. Tùy chọn Đặt mọi trường là tùy chọn dành cho dữ liệu một phần hoặc dữ liệu patch.
Điều gì xảy ra khi giá trị đôi khi là null?
Trường sẽ cho phép null: string | null trong TypeScript, con trỏ trong Go, str | None trong Python, String? trong Kotlin và Swift, Option<String> trong Rust, còn Java và C# dùng kiểu đóng hộp hoặc kiểu nullable. Trường luôn là null ở mọi mẫu thì không có kiểu để suy ra, nên sẽ thành kiểu unknown hoặc kiểu JSON động của ngôn ngữ đó.
Vì sao số nguyên của tôi lại thành float?
Nếu một mẫu có 7 và mẫu khác có 7.5 cho cùng một trường, kiểu phải chứa được cả hai nên sẽ thành float hoặc double. Số viết có dấu thập phân, như 10.0, cũng được coi là số thập phân. Trong TypeScript cả hai đều là number; với Zod, trường chỉ có số nguyên được kiểm tra bằng z.number().int().
Công cụ này có giống quicktype không?
Nó giải quyết cùng một bài toán bằng trình tạo riêng, chạy hoàn toàn trên trình duyệt và có thêm vài điểm: ba kiểu Python gồm TypedDict, schema Zod và gộp nhiều tài liệu đã dán. quicktype hỗ trợ nhiều ngôn ngữ hơn và đọc được JSON Schema. Với chín ngôn ngữ ở đây, kết quả được thiết kế để biên dịch mà không cần thêm hàm hỗ trợ khi chạy.
Công cụ có nhận ra ngày, enum hay UUID không?
Không. Chuỗi vẫn là chuỗi, vì vài mẫu không đủ chứng minh mọi giá trị sau này đều là ngày hay thuộc một tập cố định. Hãy tự sửa kiểu đã tạo thành Date, time.Time, datetime, enum hoặc kiểu UUID ở nơi API của bạn đảm bảo điều đó. Ngoại lệ là đối tượng có khóa là UUID, số hoặc ngày: chúng được chuyển thành map.