JSON 转 Rust 结构体转换器
粘贴 JSON 即时获得地道的 Rust serde 结构体,100% 在浏览器中运行。正确推断 i64/u64/f64 类型,null 用 Option,camelCase 自动加 #[serde(rename)]。免费。
选项
什么是 JSON 转 Rust?
JSON 转 Rust 会把一段 JSON 示例转换为可直接编译的 Rust 结构体,带上 serde 的 #[derive(Serialize, Deserialize)] 宏,让你无需为 API 响应或配置文件手写反序列化样板代码。这个快速的 Rust 结构体生成器会推断正确的数字类型,把缺失的字段标记为 Option,并为非 snake_case 键添加 #[serde(rename)] — 全部 100% 在浏览器中完成。
示例
API 响应
{"id":101,"name":"Ada Lovelace","email":"ada@example.com","active":true,"roles":["admin","user"]} use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
pub id: i64,
pub name: String,
pub email: String,
pub active: bool,
pub roles: Vec<String>,
}
典型的 REST 负载会变成可直接放入客户端的 serde 结构体。数字推断为 i64,数组变成 Vec<String>。
嵌套对象
{"repo":"serde","owner":{"login":"dtolnay","id":100}} use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
pub repo: String,
pub owner: Owner,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Owner {
pub login: String,
pub id: i64,
}
嵌套对象会成为独立命名的结构体(Owner),按字段引用;结构相同的会被去重。
对象数组(可选字段)
{"users":[{"id":1,"nick":"x"},{"id":2}]} use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
pub users: Vec<User>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
pub id: i64,
pub nick: Option<String>,
}
对象数组会合并为一个元素结构体。部分元素缺失的键会变成 Option<String> — 无需 #[serde(default)]。
camelCase 键名
{"login":"octocat","publicRepos":15,"followerCount":9001,"createdAt":"2011-01-25"} use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
pub login: String,
#[serde(rename = "publicRepos")]
pub public_repos: i64,
#[serde(rename = "followerCount")]
pub follower_count: i64,
#[serde(rename = "createdAt")]
pub created_at: String,
}
字段变成 snake_case,并用 #[serde(rename)] 映射回原始 JSON 键。已经是 snake 形式的键(如 login)不会添加 rename。
如何将 JSON 转换为 Rust
- 1
粘贴你的 JSON
将 JSON 对象、数组或 API 响应放入输入框,转换即刻开始。
- 2
调整输出
重命名根结构体,切换 serde derive、Debug 和 Clone,或 pub 可见性,以匹配你的 crate 风格。
- 3
复制或下载
一键获取生成的 Rust 代码,直接粘贴到你的项目中。
Common Use Cases
- 带类型的 API 客户端
- 将 REST 或 GraphQL 响应示例转换为 serde 结构体,用于 reqwest 或类似客户端,无需手写反序列化样板代码。
- 配置与测试夹具解析
- 为需要用 serde_json 反序列化的 JSON 配置文件、测试夹具或 webhook 负载生成结构体。
- 快速原型开发
- 粘贴一个不熟悉的负载,即时看到它作为 Rust 类型的结构 — 在接入前快速探索新 API 的方式。
转换原理
- 结构推断
- 每个对象都会成为一个命名结构体;结构相同的会被去重,因此你得到的是一个结构体而非多份副本。对象数组会逐键合并,部分元素缺失的键会变成 Option<T>。
- 正确的数字类型
- 整数映射为 i64,超过 i64::MAX 时提升为 u64,超过 u64 则回退到 f64。浮点数会从 token 中识别(1.0、2e3),因此 serde 反序列化绝不会因浮点数放入整数而失败。
- 地道且可编译的标识符
- 键会变成 snake_case 字段,并用 #[serde(rename)] 映射回原始键;Rust 关键字、重复名称和非标识符键都会被净化,因此输出始终能编译。
- 100% 浏览器端
- 解析和生成都在浏览器中运行,没有任何网络请求,因此你的数据保持私密。
编写整洁 Rust 结构体的技巧
- 为根结构体命名
- 设置一个有意义的根名称(如 User、ApiResponse),而非默认的 Root,让代码更易读。
- 仅在需要时添加 serde_json
- serde_json::Value 会出现在空数组或混合类型数组以及只有 null 的字段中。如果可以,请用更完整的示例为这些字段指定具体类型,或在 Cargo.toml 中添加 serde_json。
- 检查 Option 与必填的区别
- 只有当示例省略某字段时,它才会被标记为 Option<T>。请粘贴有代表性的负载,让工具准确推断必填与可选字段。
常见问题
如何将 JSON 转换为 Rust 结构体?
它会生成 serde derive 吗?我需要 serde 和 serde_json 吗?
如何用生成的结构体来解析 JSON?
可选字段和 null 字段是如何处理的?
它如何处理 camelCase 键名和 Rust 关键字?
它能用 #[serde(rename_all)] 代替逐字段 rename 吗?
它使用哪种 Rust 数字类型?
日期和时间戳是如何标注类型的?
如何处理键是动态或未知的对象?
我的 JSON 数据是否私密安全?
我能生成不带 serde 的纯 Rust 结构体吗?
本工具免费吗?需要账户吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
Base64 转图片转换工具
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
.env 转 JSON 转换器
编码和格式化
粘贴 .env 文件,立即得到 JSON。数据库密码、API 密钥和令牌绝不离开你的浏览器 — 100% 本地、零上传、免费的 dotenv 解析器。
免费 HTML 实体解码器 — 解码 HTML
编码和格式化
在线解码 HTML 实体、还原转义后的 HTML——免费、免注册、100% 在浏览器中运行。把命名、十进制和十六进制引用转回字符;绝不上传。
免费 HTML 实体编码器 — 转义 HTML
编码和格式化
在线编码 HTML 实体、转义特殊字符(< > & " ')——免费、免注册、100% 在浏览器中运行。支持命名、十进制或十六进制输出;绝不上传。