Rust-使用Serde对json数据进行反序列化

引言

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 = {version="1.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_all="camelCase"的使用,将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) -> MyResult<CliConfig> {
   
        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部分写得非常详细。我这里列出几个稍微常用一点的。

以上的代码来至于我的uni-platform的开源项目


这篇文章收录我的Rust 实战专栏。请关注我,不要错过更新哟。

相关推荐

  1. Rust-使用Serdejson数据进行序列

    2024-01-05 11:32:05       46 阅读
  2. rust 第三方库】serde 序列序列框架

    2024-01-05 11:32:05       8 阅读
  3. 使用Jackson进行序列序列

    2024-01-05 11:32:05       19 阅读
  4. Json 序列错误

    2024-01-05 11:32:05       7 阅读
  5. 【Kotlin】自定义Json序列

    2024-01-05 11:32:05       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-05 11:32:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-05 11:32:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-05 11:32:05       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-05 11:32:05       20 阅读

热门阅读

  1. 3-python实现暴力破解

    2024-01-05 11:32:05       32 阅读
  2. <sa8650>sa8650 CDT-之-汽车CDT配置用户指南(下)

    2024-01-05 11:32:05       35 阅读
  3. 桥接模式和NAT模式的区别

    2024-01-05 11:32:05       33 阅读
  4. 2024 年初的大语言模型编程实践

    2024-01-05 11:32:05       31 阅读
  5. element ui弹窗在别的弹窗下方,优先级不高的问题

    2024-01-05 11:32:05       41 阅读
  6. CMakeLists.txt 怎么写

    2024-01-05 11:32:05       31 阅读