UTILS.
100% 浏览器内运行
🦀

JSON 转 Rust Serde 结构体

从 JSON 示例生成带 serde 派生的 Rust 结构体,随时可 Serialize/Deserialize,可为空字段用 Option 表示,并带 rename 属性。

输出

关于此工具

JSON 转 Rust Serde 结构体工具可将粘贴的 JSON 示例转换为为 serde 标注好的 Rust 结构体,让你无需手写每个字段即可反序列化同样的载荷。它解析 JSON,递归推断 Rust 类型,并为每个对象输出一个 #[derive(Serialize, Deserialize, ...)] 结构体:字符串变为 String,整数变为 i64(当所有样本都非负时变为 u64),其他数字变为 f64,布尔值变为 bool,数组变为 Vec<T>,嵌套对象则各自生成 PascalCase 结构体并定义在其父级之前。

所有工作都用 JSON.parse 和纯 JavaScript 在你的浏览器本地完成——不上传任何内容。结构体字段会转换为 snake_case,每当 JSON 键与 snake_case 字段不同时,工具会添加 #[serde(rename = "originalKey")],使结构体仍能映射到线路格式。某些同级样本中缺失的键,或被视为 null 的键,会变为 Option<T> 并带 #[serde(default)],使反序列化能容忍其缺失。空数组回退为 Vec<serde_json::Value>。

整数宽度开关可在 64 位(i64/u64,默认)和 32 位(i32/u32)整数之间切换,当采样值超出 32 位范围时会自动提升为 64 位。派生开关可在完整集合(Serialize, Deserialize, Debug, Clone)和最小集合 Serialize, Deserialize 之间选择。文件以 use serde::{Serialize, Deserialize}; 开头。复制它,或下载 .rs 文件。

常见问题

JSON 类型如何映射到 Rust?
string 变为 String,整数变为 i64(当每个样本都非负时变为 u64),非整数数字变为 f64,布尔值变为 bool,数组变为 Vec<T>,对象变为带 serde 派生的命名结构体。null 或缺失的字段变为 Option<T> 并带 #[serde(default)]。
什么时候会添加 #[serde(rename)]?
每当 JSON 键不等于其 snake_case 字段名时——例如键 userName 会生成字段 user_name 并带 #[serde(rename = "userName")],使结构体仍能完全按原样反序列化原始 JSON。
我可以选择整数宽度吗?
可以。宽度开关会输出 64 位(i64/u64)或 32 位(i32/u32)整数。符号性依据数据而定:全部非负的样本使用无符号类型。超出 32 位范围的值会自动提升为 64 位。
会包含哪些派生?
默认是 #[derive(Serialize, Deserialize, Debug, Clone)];最小选项只输出 Serialize, Deserialize。子结构体会在引用它们的父级之前声明,因此模块可原样编译。

更多工具