JSON 转 Rust serde Struct

生成 serde struct:derive 宏、rename 映射、Vec 数组、i64/f64 类型分派。

Rust 处理 JSON 的标准姿势是 serde:struct 上挂 derive(Serialize, Deserialize),反序列化由编译期生成。本工具把 JSON 按结构展开成 pub struct 集:嵌套对象独立建模,字段 pub,JSON 键与 Rust 命名规范不一致时补 #[serde(rename)]。

类型映射遵循 Rust 习惯:整数 i64、小数 f64、布尔 bool、字符串 String、数组 Vec<T>;null 字段映射为 serde_json::Value 以保持类型诚实(Rust 没有隐式 null)。数组根生成 pub type 别名。

camelCase 转换与 rename 的分工

Rust 惯例字段用 snake_case,而 JSON API 多为 camelCase。两条路线:给 struct 挂 #[serde(rename_all = "camelCase")](本工具的默认输出,一行搞定全部字段),个别不规则键再用 #[serde(rename = "…")] 精确覆盖。

null 与 Option 的手工调整

JSON null 在工具里映射为 serde_json::Value(保持「什么都能来」的诚实)。如果业务上该字段是「可能缺失的字符串」,把类型改成 Option<String> 并加 #[serde(default)] 即可——这是唯一需要手工润色的常见场景。

常见问题

需要哪些 crate 依赖?
serde(带 derive feature)与 serde_json。Cargo.toml 里 serde = { version = "1", features = ["derive"] } 即可编译生成的代码。
嵌套数组(Vec<Vec<T>>)支持吗?
支持。数组类型递归推断:数组的数组生成 Vec<Vec<T>>,嵌套对象照常独立成 struct。
大整数会溢出吗?
整数统一映射 i64(-2^63 到 2^63-1);超过范围的 JSON 整数在实际 API 中罕见,遇到时手工改成 i128 或用 serde_json::Number 承接。

相关工具