开发者 / 类型
JSON转Rust结构体转换器
将JSON示例转换为派生serde的Serialize和Deserialize的Rust结构体,支持snake_case字段、重命名、为缺失或null键使用Option,以及为数组使用Vec。
JSON转Rust结构体转换器: 每个对象都会转换为一个包含公共字段的结构体。键名会转换为snake_case;如果JSON中的拼写不同,则会添加#[serde(rename = "…")];对于type等Rust关键字,则会使用原始标识符(r#type),serde会自动将其映射回原名称。在部分记录中缺失或为null的键会使用Option<T>,无法明确判断类型的值会使用serde_json::Value。多个示例的输出已使用serde 1进行编译,并用serde反序列化其示例数据。 完全在浏览器中本地运行,文件不会上传到服务器。
- 类别
- 开发者工具
- 使用次数
- 在浏览器中
- 费用
- 免费·无需注册
- 可用性
- 可直接使用
完全在浏览器中运行
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>;
需要serde(启用derive特性)和serde_json这两个crate。字段名会转换为snake_case;如果键名不同,则使用#[serde(rename)];在部分对象中缺失或为null的键会变为Option。除非示例包含小数,否则数字类型为i64。
读取和写入数据
使用serde_json::from_str::<Root>(&text)?进行反序列化,使用serde_json::to_string(&value)?进行序列化。输入中的未知键默认会被忽略;如需拒绝未知键,请在结构体中添加#[serde(deny_unknown_fields)]。
Option和缺失的键
对于Option字段,缺失的键和值为null的情况都会反序列化为None。如果需要区分二者,请结合serde_with程序包使用Option<Option<T>>,或让该字段保留为serde_json::Value。
使用方法
- 粘贴JSON示例,最好使用包含多个典型记录的数组。
- 为顶层类型命名,并选择序列化时是否省略None字段。
- 将结构体复制到你的crate中,该crate需要serde和serde_json。
隐私与限制
JSON会在你的浏览器中转换,绝不会上传。
相关工具
常见问题
我需要哪些crate?
需要启用derive功能的serde,以及serde_json:在Cargo.toml中加入serde = { version = "1", features = ["derive"] }和serde_json = "1"。
为什么使用i64和f64?
它们可以安全容纳任何JSON数字。如果你确定数值范围,可将其缩小为u32、u8或f32。
可以改用#[serde(rename_all)]吗?
可以:如果每个键都遵循相同的命名约定,例如camelCase,那么在结构体上使用一个#[serde(rename_all = "camelCase")]即可替代单独的重命名设置。
免费工具·使用在浏览器中次·无需账户