Nhà phát triển / Loại

Bộ chuyển đổi cấu trúc JSON sang Rust

Chuyển một mẫu JSON thành các cấu trúc Rust có derive Serialize và Deserialize của serde, với trường snake_case, tên thay thế, Option cho khóa bị thiếu hoặc null và Vec cho mảng.

Bộ chuyển đổi cấu trúc JSON sang Rust: Mỗi đối tượng trở thành một struct có các trường công khai. Các khóa được chuyển thành snake_case; khi cách viết trong JSON khác đi, công cụ thêm #[serde(rename = "…")]. Các từ khóa Rust như type trở thành định danh thô (r#type), và serde tự động ánh xạ chúng về tên ban đầu. Những khóa bị thiếu hoặc có giá trị null trong một số bản ghi sẽ trở thành Option<T>; các giá trị không có kiểu rõ ràng sẽ trở thành serde_json::Value. Đầu ra cho nhiều mẫu đã được biên dịch và dùng serde 1 để giải tuần tự mẫu của nó. Chạy 100% cục bộ trong trình duyệt của bạn, không có tệp nào được tải lên máy chủ.

Lượt chạy
Trong trình duyệt của bạn
Chi phí
Miễn phí · không cần đăng ký
Trạng thái khả dụng
Sẵn sàng sử dụng
JSON sang RustXử lý cục bộ

Chạy hoàn toàn trong trình duyệt của bạn

Rust

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Address {
    pub city: String,
    pub zip_code: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    pub id: i64,
    pub user_name: String,
    pub avatar_url: String,
    pub score: f64,
    pub tags: Vec<String>,
    pub address: Address,
    pub manager_id: Option<i64>,
    #[serde(default)]
    pub nickname: Option<String>,
}

pub type UserList = Vec<User>;

Cần các crate serde (với tính năng derive) và serde_json. Tên trường được chuyển thành snake_case bằng #[serde(rename)] khi tên khóa khác nhau; các khóa bị thiếu hoặc có giá trị null trong một số đối tượng sẽ trở thành Option. Các số là i64, trừ khi mẫu có phần thập phân.

Đọc và ghi dữ liệu

Giải tuần tự bằng serde_json::from_str::<Root>(&text)? và tuần tự hóa bằng serde_json::to_string(&value)?. Theo mặc định, các khóa không xác định trong dữ liệu đầu vào sẽ bị bỏ qua; thêm #[serde(deny_unknown_fields)] vào một struct để từ chối chúng.

Để xem cùng một mẫu trong Go, hãy xem JSON sang Go; để định dạng gọn gàng mẫu trước, hãy dùng trình định dạng JSON.

Option và khóa bị thiếu

Một khóa bị thiếu và một giá trị null đều được giải tuần tự thành None đối với trường Option. Nếu cần phân biệt hai trường hợp này, hãy dùng Option<Option<T>> với crate serde_with, hoặc giữ serde_json::Value cho trường đó.

Cách sử dụng

  1. Dán một mẫu JSON, lý tưởng là một mảng gồm vài bản ghi điển hình.
  2. Đặt tên cho kiểu cấp cao nhất và chọn có bỏ qua các trường None khi tuần tự hóa hay không.
  3. Sao chép các cấu trúc vào crate của bạn; crate này cần serde và serde_json.

Quyền riêng tư và giới hạn

JSON được chuyển đổi trong trình duyệt của bạn và không bao giờ được tải lên.

Công cụ liên quan

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"] } cùng serde_json = "1" trong Cargo.toml.

Tại sao lại là i64 và f64?

Các kiểu này có thể lưu an toàn mọi số JSON. Hãy thu hẹp thành u32, u8 hoặc f32 khi bạn biết phạm vi giá trị.

Tôi có thể dùng #[serde(rename_all)] thay thế không?

Có: nếu mọi khóa đều dùng cùng một quy ước, chẳng hạn camelCase, một #[serde(rename_all = "camelCase")] trên struct sẽ thay thế các khai báo rename riêng lẻ.

Công cụ miễn phí · trong trình duyệt của bạn lượt chạy · không cần tài khoản