JSON 转 Rust · 免费在线生成 Rust struct
免费在线 JSON 转 Rust 工具,粘贴 JSON 一键生成 Rust struct(字段 snake_case,自动派生 Serialize/Deserialize,并按需加 #[serde(rename)]),自动推断类型、支持嵌套。纯浏览器本地生成,不上传、免登录。
- 粘贴接口返回的 JSON(本页已自动预选 Rust)。
- 填写根 struct 名,默认 Root。
- 复制生成的 Rust struct 到 .rs 文件。
- 在 Cargo.toml 加 serde 依赖并 use serde 的派生宏。
需要在 Cargo.toml 加什么依赖?
要 serde 并开启 derive feature:serde = { version = "1", features = ["derive"] };解析 JSON 还需 serde_json = "1"。代码里补 use serde::{Serialize, Deserialize};。若 JSON 里有 null 字段,生成结果会用到 serde_json::Value,这时 serde_json 是必需的,不只是可选。
字段名为什么转成了 snake_case?
Rust 惯例字段用蛇形命名,驼峰字段名会触发 non_snake_case 警告。生成时把 userName 转成 user_name,并自动加 #[serde(rename = "userName")] 保证反序列化对得上原键。如果整个结构体的键都是驼峰,也可以删掉逐字段的 rename,改成给 struct 加 #[serde(rename_all = "camelCase")] 更简洁。
可选字段怎么处理?
推断结果都是必填字段,反序列化时缺字段会直接报错。可选字段应改成 Option<T>,serde 会把缺失或 null 都解析成 None。也可以配合 #[serde(default)] 让缺失字段取 Default 值。这一步必须按接口协议手工确认,样例 JSON 无法反映字段是否可选。
整数类型选 i32 还是 i64?
按样例值大小推断:普通整数用 i32,绝对值超过 i32 上限用 i64。但样例只是一个快照——时间戳(毫秒)、雪花 ID 这类字段即使当前样例值不大,也应手工改成 i64 或 u64,否则线上大数值会反序列化溢出报错。
派生了哪些 trait?还需要加什么?
默认派生 Debug、Serialize、Deserialize,够用于打印和 JSON 双向转换。按需可再加 Clone(需要复制实例)、PartialEq(比较或写测试断言)、Default(配合 #[serde(default)])。嵌套 struct 会生成同级定义,一个文件放多个 struct 在 Rust 里是允许的,整段复制即可。