给人做网站能赚钱吗,个人主页介绍文案,企业查询平台有哪些,成都专业的网站设计公司引言
JSON作为目前流行的数据格式之一#xff0c;被大家广泛使用。在日常的开发实践中#xff0c;将JSON数据反序列化为对应的类型具有以下几个重要的意义#xff1a; 1. 访问和操作数据 将JSON数据反序列化为对应的类型#xff0c;可以更方便地访问和操作数据#xff0c…引言
JSON作为目前流行的数据格式之一被大家广泛使用。在日常的开发实践中将JSON数据反序列化为对应的类型具有以下几个重要的意义 1. 访问和操作数据 将JSON数据反序列化为对应的类型可以更方便地访问和操作数据而无需手动解析JSON字符串。 2. 类型检查和验证 在反序列化过程中会将JSON数据映射到指定的类型如果JSON数据与类型不匹配将会抛出异常或返回错误。这样可以确保数据的完整性和一致性。 3.可读性和可维护性 使用类型化的数据结构可以更好地表达数据的含义使代码更易于理解和维护。
什么是Serde
在Rust中Serde几乎成了JSON数据解析的事实标准例如tokio、Actix等网络库都采用Serde来处理JSON的序列化和反序列工作。Serde简化数据序列化和反序列化的过程提供类型安全和错误处理支持自定义序列化和反序列化逻辑它的强大功能使它得到了广泛的应用和支持。
如何使用Serde
安装依赖
cargo add serde
cargo add serde_json注意安装完成后需要修改Cargo.toml如下
[dependencies]
serde {version1.0.194,features[derive]}
serde_json 1.0.110
thiserror 1.0.56给serde加上features[derive]
定义json文件
{projectName: 测试工程,projectBase: {comment: 项目的基础功能模板配置,git: 模版的git地址,tag: 版本号或者分支名称版本号参考semver规则},pages: {...},components: {...},composeAreas:{...}
}定义对应类型
#[derive(Deserialize, Debug)]
#[serde(rename_all camelCase)]
pub struct CliConfig {pub project_name: String,pub project_base: ProjectBase,pub components: Components,pub compose_areas: ComposeAreas,
}注意rename_allcamelCase的使用将json数据中的projectName转换成project_name。
最后从文件加载并进行反序列化。
use crate::errors::MyResult;
use crate::models::CliConfig;
use std::fs::File;
use std::io::BufReader;pub struct Data {}impl Data {pub fn load_config(config_path: str) - MyResultCliConfig {let file File::open(config_path)?;let reader BufReader::new(file);let config: CliConfig serde_json::from_reader(reader)?;Ok(config)}
}上面的代码可以完成日常的json反序列化工作。
更高级的使用
更高级的使用请参考官方文档https://serde.rs/其中的https://serde.rs/examples.html部分写得非常详细。我这里列出几个稍微常用一点的。
在JSON中的结构体和枚举枚举的表示形式字段的默认值结构体的展平将字段序列化为驼峰命名法将枚举序列化为数字跳过序列化字段手动实现结构体的反序列化
以上的代码来至于我的uni-platform的开源项目
这篇文章收录我的Rust 实战专栏。请关注我不要错过更新哟。