Chuyển JSON sang struct Rust (serde)

Tạo struct Rust từ JSON với derive Serialize/Deserialize của serde, trường snake_case, thuộc tính rename, Option cho null và Vec cho mảng. Miễn phí.

Cần crate serde (bật derive) và serde_json. Trường viết snake_case, thêm #[serde(rename)] khi khác khóa JSON.

Chạy hoàn toàn trong trình duyệt. Dữ liệu của bạn không bao giờ bị tải lên.

Công cụ Liên quan

Xem Tất cả

JSON sang Rust là gì?

Dán JSON để nhận định nghĩa struct Rust có thể deserialize dữ liệu đó bằng serde. Mọi struct đều derive Debug, Clone, Serialize, Deserialize; tên trường viết snake_case và giữ khóa gốc bằng #[serde(rename = "…")] khi cần.

Cách sử dụng JSON sang Rust

  1. Dán mẫu JSON vào ô JSON đầu vào (hoặc nhấn Tải ví dụ / Mở tệp).
  2. Đặt Tên kiểu gốc (mặc định là Root).
  3. Sao chép mã Rust được tạo ra hoặc nhấn Tải xuống để lưu thành tệp.

Ví dụ

Đầu vào
{"id":1,"name":"A","tags":["x"]}
Đầu ra
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub id: i64,
    pub name: String,
    pub tags: Vec<String>,
}

Khi nào nên dùng JSON sang Rust

Dùng khi viết client hoặc CLI Rust đọc dữ liệu JSON. Hãy tinh chỉnh kiểu sau đó – ví dụ u32 cho số đếm nhỏ hoặc kiểu chrono cho timestamp – vì một mẫu không thể cho biết phạm vi giá trị thực tế.

JSON sang Rust hoạt động như thế nào

Mẫu JSON được duyệt đệ quy và mỗi vị trí ghi nhận các kiểu dữ liệu đã gặp. Mảng đối tượng được gộp thành một kiểu: khóa thiếu ở một số phần tử trở thành tùy chọn, khóa có giá trị null ở đâu đó trở thành nullable, số nguyên trộn với số thập phân trở thành kiểu số thực, và mọi trường hợp trộn kiểu khác sẽ dùng kiểu động. Đối tượng lồng nhau trở thành kiểu có tên riêng (tên khóa viết PascalCase, khóa mảng được chuyển về số ít: orders → Order), kèm hậu tố số khi trùng tên. Đầu ra Rust ánh xạ số nguyên thành i64, số thập phân thành f64, chuỗi thành String, boolean thành bool, mảng thành Vec<T>, giá trị nullable thành Option<T> và giá trị động hoặc chỉ có null thành serde_json::Value. Trường thiếu ở một số mẫu trở thành Option<T> kèm #[serde(default, skip_serializing_if = "Option::is_none")]. Từ khóa như type được viết dưới dạng raw identifier (r#type).

Các Trường Hợp Sử Dụng Phổ Biến

  • Deserialize phản hồi REST API bằng reqwest + serde
  • Mô hình hóa tệp cấu hình JSON cho công cụ CLI
  • Tạo kiểu cho trình xử lý webhook
  • Chuyển fixture cho kiểm thử tích hợp Rust

Câu Hỏi Thường Gặp

Tôi cần những crate nào?

serde với tính năng derive và serde_json: serde = { version = "1", features = ["derive"] } và serde_json = "1".

Vì sao dùng serde_json::Value?

Nó được dùng khi một khóa trộn nhiều kiểu hoặc luôn là null trong mẫu, nên không thể chọn an toàn một kiểu Rust cụ thể.

Vì sao lại là r#type?

type là từ khóa của Rust; cú pháp raw identifier cho phép dùng nó làm tên trường trong khi serde vẫn khớp với khóa JSON.

Khám phá thêm danh mục