JSON数据的解析和生成(Rust)

摘要:
主题将JSON字符串反序列化为Persons类(结构)的对象,然后将该对象序列化为JSON字符串。Person类(结构)包含两个字段:字符串类型的name字段和整数类型的age字段。

课题

  • 将 JSON 字符串反序列化为 Persons 类(结构)的对象 ,然后将这个对象序列化为 JSON 字符串。
  • Persons 类(结构)包含一个字段:Person 类(结构)的 persons 数组。
  • Person 类(结构)包含两个字段:字符串类型的 name 字段和整数类型的 age 字段。

Rust

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
struct Persons {
    // #[serde(rename(serialize = "persons", deserialize = "persons"))]
    persons: Vec<Person>,
}

#[derive(Serialize, Deserialize, Debug)]
struct Person {
    // #[serde(rename(serialize = "name", deserialize = "name"))]
    name: String,
    // #[serde(rename(serialize = "age", deserialize = "age"))]
    age: i32,
}

fn main() -> Result<(), Box<dyn Error>> {
    let json_str = r#"{
        "persons" : [
            {
                "name" : "Joe",
                "age" : 12
            }
        ]
    }"#;
    let v: Persons = serde_json::from_str(&json_str)?;
    println!("{:?}", v);
    let json_str = serde_json::to_string(&v)?;
    println!("{}", json_str);
    let json_str = serde_json::to_string_pretty(&v)?;
    println!("{}", json_str);

    Ok(())
}

/*
Persons { persons: [Person { name: "Joe", age: 12 }] }
{"persons":[{"name":"Joe","age":12}]}
{
  "persons": [
    {
      "name": "Joe",
      "age": 12
    }
  ]
}
*/

免责声明:文章转载自《JSON数据的解析和生成(Rust)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue实例获取当前系统时间开机自启:bat实现一次性打开win7中的常用软件和文件夹下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Rust-使用包、Crate和模块管理不断增长的项目

当我们编写大型程序时,组织代码显得很重要,因为你想在脑海中通晓整个程序,那几乎是不可能完成的。通过对相关功能分组和划分不同功能的代码,你可以清楚在哪里可以找到实现了特定功能的代码,以及在哪里可以改变一个功能的工作方式。 到目前为止,我们编写的程序都在一个文件的一个模块中。伴随着项目的增长,你可以通过将代码分解为多个模块和多个文件来组织代码。一个包可以包含多...

Rust 中项目构建管理工具 Cargo简单介绍

cargo是Rust内置的项目管理工具。用于Rust 项目的创建、编译、执行,同一时候对项目的依赖进行管理,自己主动推断使用的第三方依赖库,进行下载和版本号升级。 一、查看 cargo 版本号 安装Rust之后,能够使用 cargo --version 查看cargo的版本号信息。 $ cargo --version cargo 0.8.0-nightl...

配置IDEA Rust 环境

假设已经安装好IDEA Ultimate版本了。 1、安装 C++ Build Tools http://go.microsoft.com/fwlink/?LinkId=691126 2、安装 rust sdk https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-in...

Rust 包管理器 Cargo 入门

此文转载自:https://my.oschina.net/u/4701816/blog/4705244 大咖揭秘Java人都栽在了哪?点击免费领取《大厂面试清单》,攻克面试难关~>>> Rust 包管理器 Cargo 入门   了解 Rust 的软件包管理器和构建工具。 -- Gaurav Kamathe(作者) Rust ...

Rust中的变量的声明和定义

变量的声明和定义 Rust中合法的标识符(包括变量名、函数名、triat名等)必须由数字、字母、下划线组成,而且不能以数字开头。这个和很多语言都是一样的。Rust将来也会允许其他Unicode字符作为标识符,还有raw identifier功能,这样可以使关键字作为标识符,比如r#self,这个用途在FFI中最多。 变量的声明: let variable...

rust warning: unused imports、dead_code等elints告警禁止方法

编写rust项目时,声明了一些变量或导入了一些模块目前没有用到,,编译的时候一直有黄色的告警,诸如"dead_code", "unused_imports","unused_variables","unused_mut"...等,很影响看调试日志,最重要的是!!这些告警我知道,一直报很影响心情。 基本的方法就是代码添加#[allow(dead_code)]...