UTILS.
100% trong trình duyệt
🦀

JSON sang Rust Serde Struct

Tạo các struct Rust với derive serde từ một JSON mẫu, sẵn sàng để Serialize/Deserialize, với Option cho các trường nullable và thuộc tính rename.

đầu ra

Về công cụ này

Công cụ JSON sang Rust Serde Struct chuyển một JSON mẫu được dán vào thành các struct Rust có chú thích cho serde, nên bạn có thể deserialize cùng payload mà không phải viết tay từng trường. Nó phân tích JSON, suy luận kiểu Rust đệ quy, và phát ra một struct #[derive(Serialize, Deserialize, ...)] cho mỗi đối tượng: chuỗi trở thành String, số nguyên i64 (hoặc u64 khi mọi mẫu đều không âm), các số khác f64, boolean bool, mảng Vec<T>, và các đối tượng lồng nhau có struct PascalCase riêng được định nghĩa trước cha của chúng.

Mọi việc diễn ra cục bộ trong trình duyệt của bạn với JSON.parse và JavaScript thuần — không có gì được tải lên. Các trường struct được chuyển sang snake_case, và bất cứ khi nào một khóa JSON khác với trường snake_case, công cụ thêm #[serde(rename = "originalKey")] để struct vẫn ánh xạ đúng định dạng trên đường truyền. Các khóa vắng mặt ở một số mẫu anh em, hoặc được thấy là null, trở thành Option<T> với #[serde(default)] để việc deserialize chấp nhận sự vắng mặt của chúng. Mảng rỗng lùi về Vec<serde_json::Value>.

Công tắc độ rộng số nguyên chuyển giữa số nguyên 64-bit (i64/u64, mặc định) và 32-bit (i32/u32), tự động nâng lên 64-bit khi một giá trị mẫu vượt phạm vi 32-bit. Công tắc derive chọn giữa bộ đầy đủ (Serialize, Deserialize, Debug, Clone) và bộ tối thiểu Serialize, Deserialize. Tệp bắt đầu bằng use serde::{Serialize, Deserialize};. Sao chép hoặc tải xuống một tệp .rs.

Câu hỏi thường gặp

Các kiểu JSON được ánh xạ sang Rust như thế nào?
string sang String, số nguyên sang i64 (hoặc u64 khi mọi mẫu đều không âm), số không nguyên sang f64, boolean sang bool, mảng sang Vec<T>, và đối tượng sang một struct được đặt tên với derive serde. Trường null hoặc thiếu trở thành Option<T> với #[serde(default)].
Khi nào #[serde(rename)] được thêm vào?
Bất cứ khi nào khóa JSON không bằng tên trường snake_case của nó — ví dụ một khóa userName tạo ra trường user_name với #[serde(rename = "userName")], nên struct vẫn deserialize đúng chính xác JSON gốc.
Tôi có thể chọn độ rộng số nguyên không?
Có. Công tắc độ rộng phát ra số nguyên 64-bit (i64/u64) hoặc 32-bit (i32/u32). Dấu theo dữ liệu: các mẫu toàn không-âm dùng kiểu không dấu. Các giá trị vượt phạm vi 32-bit được tự động nâng lên 64-bit.
Những derive nào được bao gồm?
Mặc định là #[derive(Serialize, Deserialize, Debug, Clone)]; tùy chọn tối thiểu chỉ phát ra Serialize, Deserialize. Các struct con được khai báo trước các cha tham chiếu đến chúng để module biên dịch được ngay.

Công cụ khác