首页 > 其他分享 >5分钟学会Rust语言如何操作JSON

5分钟学会Rust语言如何操作JSON

时间:2024-04-10 15:32:11浏览次数:25  
标签:serde 学会 json JSON let 序列化 Rust

JSON(JavaScript Object Notation)在Web开发中被广泛应用于数据交换。作为一种数据格式,JSON相较于XML来说,更易于阅读和写入,且数据解析性能强。Rust作为一门系统级编程语言,其与JSON的交互操作密切。本文将详细地描述在Rust中如何操作JSON,包括序列化、反序列化、JSON创建等多个方面,并且提供多个示例。

serde_json官方文档:serde_json - Rust

serde官方:Overview · Serde

Serde 生态系统由知道如何序列化和反序列化本身的数据结构以及知道如何序列化和反序列化其他事物的数据格式组成。Serde 提供了这两个组相互交互的层,允许使用任何受支持的数据格式对任何受支持的数据结构进行序列化和反序列化。

在Cargo.toml添加对serde,serde_json库的依赖:

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

JSON序列化

serde提供了一种将 Rust 结构作为 JSON 数据进行序列化的方法。如下,我们创建一个结构体,然后将其转换为JSON:

use serde::{Serialize, Deserialize};
use serde_json::Result;
#[derive(Serialize, Deserialize, Debug)]
struct Point {
    x: i32,
    y: i32,
}
fn to_json() -> Result<()> {
    let point = Point { x: 1, y: 2 };
    let serialized = serde_json::to_string(&point)?;
    println!("serialized = {}", serialized);
    Ok(())
}

JSON反序列化

反序列化就是将JSON数据转换回Rust结构。拿上面的JSON格式的Point为例,我们可以如下操作:

fn from_json() -> Result<()> {
    let data = r#"{"x":1,"y":2}"#;
    let p: Point = serde_json::from_str(data)?;
    println!("deserialized = {:?}", p);
    Ok(())
}

创建JSON 

Rust中提供了直接创建JSON的方法,详细如下:

fn create_json() {
    let json = serde_json::json!({
        "code": 200,
        "success": true,
        "payload": {
            "features": ["serde", "json"],
            "ids": [1, 2, 3]
        }
    });
    println!("json = {}", json);
}

在这里,我们创建了一个包含嵌套对象和数组的复杂JSON对象。

访问和修改JSON

创建JSON后,我们可以通过索引来访问和修改其中的值,就像普通的Rust数组和Map一样。

fn modify_json() {
    let mut json = serde_json::json!({"ferris": "hello"});
    json["ferris"] = serde_json::json!("world");
    assert_eq!("world", json["ferris"]);
}

处理JSON是网络编程中最常见的操作之一, Rust通过serde和serde_json两个库为我们提供了强大的JSON处理能力,帮助我们轻松实现JSON序列化、反序列化,以及JSON的创建和修改。除此之外,serde库还支持许多其他数据格式的序列化和反序列化,使Rust在处理网络数据上更加得心应手。 

标签:serde,学会,json,JSON,let,序列化,Rust
From: https://blog.csdn.net/weixin_44786530/article/details/137477634

相关文章

  • Rust 标准库 API 文件和文件夹操作 File,读取/创建/修改/追加/删除/重命名文件等
    File::create使用File的关联函数(类似Java中的静态方法)create,创建文件,如果存在,则覆盖。usestd::fs::{File,Metadata};fnmain()->std::io::Result<()>{letfile:File=File::create("foo.txt")?;letmetadata:Metadata=file.metadata()?;println!......
  • 想拥有健康体魄?学会中医气血调理秘籍!
    《素问·调经论》所述,人的生理机能主要依赖于血与气。这两者构成了我们身体生命的基石,其他所有生理活动都是围绕这一核心进行的。因此,各种健康问题,其根源往往可以追溯到气血的失调。气虚会表现为畏寒怕冷,头晕耳鸣、自汗,倦怠乏力,心悸气短,血虚会表现为面色无华、萎黄,失眠多梦,手......
  • 跨域请求资源-jsonp和cors区别
    JSONP和CORS的区别JSONP的原理:动态创建script标签;JSONP发送的不是Ajax请求不支持Post请求;CORS中文意思是跨域资源共享,需要服务器端进行CORS配置;CORS发送的是真正的Ajax请求CORS支持Ajax的跨域如果要启用CORS跨域资源共享,关键......
  • 目标检测:yolov8(ultralytics)训练自己的数据集,新手小白也能学会训练模型,一看就会
    目录1.环境配置2.数据集获取2.1网上搜索公开数据集2.2自制数据集2.2.1Labelimg安装2.2.2Labelimg使用2.3数据集转换及划分2.3.1数据集VOC格式转yolo格式2.3.2数据集划分3.训练模型3.1创建data.yaml3.2训练模型4.模型测试5.可视化界面分为4部分,......
  • postman增加jsonpath功能
    postman的test和Pre-requestScript支持JS语言。但是并没有内置jsonPath函数可以使用变量方式,将jsonPath的函数源代码保存到变量中,需要使用的时候,读取变量,执行代码,就可以获得一个jsonpath函数。变量可保存在集合变量,环境变量和全局变量中。第一步,在变量中配置jsonpath变量名和......
  • 学会Python爬虫,你也能月薪过万!
    随着懂爬虫、学习爬虫的人越来越多,Python爬虫的岗位需求也越来越大。一方面,互联网可以获取的数据越来越多。另一方面,像Python这样的编程语言提供越来越多的优秀工具,也让爬虫变得简单、容易上手。利用爬虫我们可以获取大量的价值数据,从而获得感性认识中不能得到的信息。而......
  • GUI development with Rust and GTK4 阅读笔记
    简记这是我第二次从头开始阅读,有第一次的印象要容易不少。如果只关心具体的做法,而不思考为什么这样做,以及整体的框架,阅读的过程将会举步维艰。简略记录gtk-rs的书中提到的点。对同一个问题书中所演示了多种处理方法,而且跨度比较大,第一次阅读的时候经常出现忘记之前的内容。f......
  • PostgreSQL 将分组后的字段合并成一个 JSON 对象
    在PostgreSQL数据库中,有时需要将分组后的字段合并成一个JSON对象,并将其保存到一个新的字段中。本文将介绍如何使用PostgreSQL中的json_agg函数来实现这一目标。假设我们有一个销售订单表格,其中包含订单编号、产品名称和销售数量等字段。现在我们需要按照订单编号分组,并将......
  • PostgreSQL中json_build_object的用法
    在PostgreSQL数据库中,有时我们需要将多个字段合并成一个JSON对象,并将其用于保存或传输数据。json_build_object函数可用于将指定的键值对合并为一个JSON对象。该函数的语法如下:sqljson_build_object(keytext,valueany[,...])其中,key是JSON对象中的键名,可以是......
  • python画信封 2024年3月青少年电子学会等级考试 中小学生python编程等级考试一级真题
    目录python画信封一、题目要求二、算法分析三、程序代码四、程序说明五、运行结果六、考点分析七、推荐资料1、蓝桥杯比赛2、考级资料3、其它资料python画信封2024年3月python考级一级真题一、题目要求龙年到了,我们要给远方的亲人写一封新年贺信,请用turtle......