当前位置: 首页 > news >正文

rust学习-json的序列化和反序列化

由于 serde 库默认使用 JSON 格式进行序列化和反序列化
因此程序将使用 JSON 格式对数据进行序列化和反序列化

社区为 Serde 实现的部分数据格式列表:

  • JSON:广泛使用的 JavaScript 对象符号,用于许多 HTTP API
  • Postcard:no_std 和嵌入式系统友好的紧凑二进制格式。
  • CBOR:用于小消息大小且无需版本协商的简洁二进制对象表示法。
  • YAML:自称为“人类友好”的配置语言(不是标记语言)。
  • MessagePack:类似于紧凑 JSON 的高效二进制格式。
  • TOML:Cargo 使用的最小配置格式。
  • Pickle:Python 世界中常见的格式。
  • RON:一种 Rust 对象表示法。
  • BSON:MongoDB 使用的数据存储和网络传输格式。
  • Avro:用于 Apache Hadoop 内部的二进制格式,支持模式定义。
  • JSON5:包括 ES5 中的某些生成的 JSON 超集。
  • URL 查询字符串,x-www-form-urlencoded 格式。
  • Starlark:由 Bazel 和 Buck 构建系统用于描述构建目标的格式。(仅序列化)
  • Envy:将环境变量反序列化为 Rust 结构的一种方式。(仅反序列化)
  • Envy Store:将 AWS Parameter Store 参数反序列化为 Rust 结构的一种方式。(仅反序列化)
  • S-表达式:Lisp 语言系列使用的代码和数据的文本表示形式。
  • D-Bus 的二进制线格式。
  • FlexBuffers:Google 的 FlatBuffers 无拷贝序列化格式的无模式表兄弟。
  • Bencode:BitTorrent 协议中使用的简单二进制格式。
  • Token 流,用于处理 Rust 过程宏输入。(仅反序列化)
  • DynamoDB 项:rusoto_dynamodb 用于与 DynamoDB 传输数据的格式。
  • Hjson:围绕人类阅读和编辑而设计的 JSON 语法扩展。(仅反序列化)

serde学习

use serde::{Serialize, Deserialize};// `derive` may only be applied to `struct`s, `enum`s and `union`s
#[derive(Serialize, Deserialize, Debug)]
struct Animal {name: String,age: u32,
}fn main() {let animal = Animal {name: "Dog".to_owned(),age: 1,};let json_str = serde_json::to_string(&animal).unwrap();println!("{}", json_str);let json_str1 = r#"{"name":"Dog","age":1}"#;// 编译器无法推断变量或函数的类型,并需要使用类型注解来明确指定类型let animal1: Animal = serde_json::from_str(json_str1).unwrap();println!("{:?}", animal1)
}

更新序列化的键

use serde::{Serialize, Deserialize, Serializer, Deserializer};#[derive(Serialize, Deserialize, Debug)]
struct Animal {#[serde(rename = "animal_name")]NaMe: String,#[serde(rename = "animal_age")]AgE: u32,
}fn main() {let animal = Animal {NaMe: "Dog".to_owned(),AgE: 1,};let json_str = serde_json::to_string(&animal).unwrap();println!("{}", json_str);let json_str1 = r#"{"animal_name":"Dog","animal_age":1}"#;// 编译器无法推断变量或函数的类型,并需要使用类型注解来明确指定类型let animal1: Animal = serde_json::from_str(json_str1).unwrap();println!("{:?}", animal1)
}

打印内容如下

{"animal_name":"DOG","animal_age":1}
Animal { NaMe: "dog", AgE: 1 }

更新序列化的值

该场景在业务中貌似不会用到!!!

use serde::{Serialize, Deserialize, Serializer, Deserializer};#[derive(Serialize, Deserialize, Debug)]
struct Animal {#[serde(serialize_with = "serialize_name", deserialize_with = "deserialize_name")]// 上述serde仅处理NmeNaMe: String,AgE: u32,
}// 使用 serde 库自定义的序列化和反序列化函数
// 在序列化和反序列化期间自定义字段的名称,并使用自定义的名称序列化和反序列化数据
fn serialize_name<S>(name: &String, serializer: S) -> Result<S::Ok, S::Error>
whereS: Serializer,
{// 将输入字符串转换为大写并序列化serializer.serialize_str(&name.to_uppercase())
}fn deserialize_name<'de, D>(deserializer: D) -> Result<String, D::Error>
whereD: Deserializer<'de>,
{let name = String::deserialize(deserializer)?;// 获取输入字符串 name,并使用 name.to_lowercase() 将其转换为小写形式Ok(name.to_lowercase())
}fn main() {let animal = Animal {

相关文章:

rust学习-json的序列化和反序列化

由于 serde 库默认使用 JSON 格式进行序列化和反序列化 因此程序将使用 JSON 格式对数据进行序列化和反序列化 社区为 Serde 实现的部分数据格式列表: JSON:广泛使用的 JavaScript 对象符号,用于许多 HTTP APIPostcard:no_std 和嵌入式系统友好的紧凑二进制格式。CBOR:用…...

基于MapReduce的Hive数据倾斜场景以及调优方案

文章目录 1 Hive数据倾斜的现象1.1 Hive数据倾斜的场景1.2 解决数据倾斜问题的优化思路 2 解决Hive数据倾斜问题的方法2.1 开启负载均衡2.2 引入随机性2.3 使用MapJoin或Broadcast Join2.4 调整数据存储格式2.5 分桶表、分区表2.6 使用抽样数据进行优化2.7 过滤倾斜join单独进行…...

mysql 02 数据库的约束

为防止错误的数据被插入到数据表&#xff0c;MySQL中定义了一些维护数据库完整性的规则&#xff1b;这些规则常称为表的约束。常见约束如下&#xff1a; 主键约束 主键约束即primary key用于唯一的标识表中的每一行。被标识为主键的数据在表中是唯一的且其值不能为空。这点类似…...

Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)

一、前言 自从大模型被炒的越来越火之后&#xff0c;似乎国内涌现出很多希望基于大模型构建本地知识库的需求&#xff0c;大概在5月底的时候&#xff0c;当时Quivr发布了第一个0.0.1版本&#xff0c;第一个版本仅仅只是使用LangChain技术结合OpenAI的GPT模型实现了一个最基本的…...

Unity如何制作声音控制条(控制音量大小)

一&#xff1a;UGUI制作 1. 首先在【层级】下面创建UI里面的Slider组件。设置好它对应的宽度和高度。 2.调整Slider滑动条的填充颜色。一般声音颜色我黄色&#xff0c;所以我们也调成黄色。 我们尝试滑动Slider里面的value。 a.滑动前。 b.滑动一半。 c.滑动完。 从以上滑动va…...

非计算机科班如何顺利转行计算机领域?

文章目录 每日一句正能量前言如何规划才能实现转计算机&#xff1f;计算机岗位发展前景&#xff1f;现阶段转计算机的建议后记 每日一句正能量 改变思路&#xff0c;改变习惯&#xff0c;改变一种活的方式&#xff0c;往往会创造无限&#xff0c;风景无限&#xff01; 前言 近年…...

Android音视频剪辑器自定义View实战!

Android音视频剪辑器自定义View实战&#xff01; - 掘金 /*** Created by zhouxuming on 2023/3/30** descr 音视频剪辑器*/ public class AudioViewEditor extends View {//进度文本显示格式-数字格式public static final int HINT_FORMAT_NUMBER 0;//进度文本显示格式-时间…...

stm32_ADC电源、通道、工作模式

0、ADC功能框图 1、ADC的电源 1.1、工作电源 VSSAVSS&#xff0c;VDDAVDD&#xff0c;简单来说&#xff0c;通常stm32是3.3V&#xff0c;ADC的工作电源也是3.3V&#xff1b; 1.2、参考电压 VREF和VREF-并不一定引出&#xff0c;取决于封装&#xff0c;如果没有引出则VREF连接到…...

Vue编程式路由导航

目录 一、使用 一、使用 不使用<router-link>标签&#xff0c;利用$router中的api实现跳转&#xff0c;更灵活 <template><div><ul><li v-for"m in messageList" :key"m.id"><!-- 跳转路由并携带params参数&#xff0c…...

LVS-DR模式

目录 1、概述 2、LVS-DR模式的工作原理&#xff1a; 3、在LVS-DR模式下&#xff0c;数据包的流向分析如下&#xff1a; 4、LVS-DR是一种用于构建高可用性负载均衡集群的技术模式。LVS-DR模式具有以下特点&#xff1a; 5、LVS-DR中的ARP问题 6、配置LVS-DR需要以下几个关键…...

详细介绍生成对抗网络 (GAN) 的原理和基于Pytorch源码的实现

介绍 GAN 是一种使用 CNN(卷积神经网络)等深度学习方法进行生成建模的方法。生成建模是一种无监督学习方法,涉及自动发现和学习输入数据中的模式,以便该模型可用于从原始数据集中生成新示例。 GAN 是一种通过将问题构建为具有两个子模型的监督学习问题来训练生成模型的方…...

高性能数据处理选型

1、Redis(高性能) 2、Elasticsearch/HBase( 大数据 ) 3、MongoDB(海量数据)...

【深入理解C语言】-- 关键字2

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;深入理解C语言 &#x1f4a8;吾生也有涯&#xff0c;而知也无涯 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 前言一、关键字 - static&…...

Java进阶(3)——手动实现ArrayList 源码的初步理解分析 数组插入数据和删除数据的问题

目录 引出手动实现ArrayList定义接口MyList<T>写ArrayList的实现类增加元素删除元素 写测试类进行测试数组插入数据? 总结 引出 1.ArrayList的结构分析&#xff0c;可迭代接口&#xff0c;是List的实现&#xff1b; 2.数组增加元素和删除元素的分析&#xff0c;何时扩容…...

若依前端npm run dev启动时报错

本文主要解决问题:若依前端npm run dev启动时报错,解决办法。 目录 1、第1种解决方案(亲测有效) 2、第2种解决方案(亲测有效) Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:67:19)at Object.createHash (node…...

实战项目:基于主从Reactor模型实现高并发服务器

项目完整代码仿mudou库one thread one loop式并发服务器实现: 仿muduo库One Thread One Loop式主从Reactor模型实现⾼并发服务器&#xff1a;通过模拟实现的⾼并发服务器组件&#xff0c;可以简洁快速的完成⼀个⾼性能的服务器搭建。并且&#xff0c;通过组件内提供的不同应⽤层…...

iTOP-RK3568开发板ubuntu环境下安装Eclipse

eclipse 是使用 Java 语言开发的&#xff0c;一个 Java 应用程序&#xff0c;这意味着 eclipse 只能运行在 Java虚拟机上。倘若没有安装 JDK&#xff08;Java Development Kit&#xff09;&#xff0c;即使在 ubuntu 上安装了 eclipse&#xff0c;也不能运行&#xff0c;所以要…...

大气热力学

大气稳定度 大气稳定度又称为大气层结稳定度(贺德馨,2006)。大气层结指的是大气温度和湿度在垂直方向上的分布&#xff0c;对大气中污染物的扩散起着重要的作用。在静止大气中&#xff0c;假定气团受到垂直方向的扰动后&#xff0c;有一个向上的微小位移&#xff0c;如果大气层…...

【RabbitMQ】消息队列-RabbitMQ篇章

文章目录 1、RabbitMQ是什么2、Dokcer安装RabbitMQ2.1安装Dokcer2.2安装rabbitmq 3、RabbitMQ入门案例 - Simple 简单模式4、RabbitMQ的核心组成部分4.1 RabbitMQ整体架构4.2RabbitMQ的运行流程 5、RabbitMQ的模式5.1 发布订阅模式--fanout 1、RabbitMQ是什么 RabbitMQ是一个开…...

W5100S-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W5100S-EVB-PICO 开发板在TCP Client和TCP Server模式下&#xff0c;分别进行数据回环测试&#xff0c;本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么&#xff1f;什么是UDP Server&#xff1f;能干什么&#xff1f; UDP (User Dataqram …...

实测!Gemini+ChatGPT赋能学术写作:我的论文写作SOP(附提示词)

各位同仁好,我是七哥。一个在高校里从事人工智能相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude等大模型学术实操相关问题,多多交流,相互成就,共同进步。 为什么ChatGPT逻辑清晰却写不长?为什么Gemini能深入分析但废话连篇? …...

tinySPL 与 U-Boot 核心区别

tinySPL 与 U-Boot 核心区别 一、定位本质项目tinySPLU-Boot定位轻量极简二级引导&#xff0c;专为RTOS/裸机设计通用全能大型Bootloader&#xff0c;主打Linux系统体积极小&#xff0c;几十KB级别大&#xff0c;几百KB~数MB设计目标极速启动、轻量化、适配嵌入式轻系统功能最全…...

如何用Winhance一键优化Windows系统?完整免费指南

如何用Winhance一键优化Windows系统&#xff1f;完整免费指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN …...

Adams新手避坑指南:从几何点、Marker坐标系到立方体,这些基础元素你真的用对了吗?

Adams新手避坑指南&#xff1a;几何元素背后的工程逻辑与实战陷阱 刚接触Adams的工程师常会陷入一个误区——把软件操作手册当作圣经&#xff0c;却忽略了每个几何元素背后的物理意义和工程逻辑。这种"知其然不知其所以然"的学习方式&#xff0c;往往会导致仿真结果失…...

Windows热键冲突智能解析:Hotkey Detective终极解决方案

Windows热键冲突智能解析&#xff1a;Hotkey Detective终极解决方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 在Wind…...

G101EVT05.1友达液晶屏10.1寸LCD工业电阻触摸液晶屏幕

G101EVT05.1 G101EVT05.1是友达AUO的一款10.1英寸工业触摸液晶屏模组。公开资料显示&#xff0c;这款屏采用1280800分辨率、16:10比例、400cd/m典型亮度、LVDS接口、WLED背光、投射式电容触摸屏PCAP&#xff0c;整体更偏向工业平板、HMI、人机界面、医疗终端、嵌入式控制设备&a…...

别再让烙铁头‘烧死’了!手把手教你电烙铁日常保养与复活术(附温度设置建议)

电烙铁头养护全攻略&#xff1a;从氧化原理到实战修复技巧 1. 烙铁头氧化背后的科学原理 烙铁头氧化并非单纯由高温引起&#xff0c;而是高温与氧气共同作用的结果。当烙铁头暴露在空气中时&#xff0c;高温会加速金属表面与氧气的化学反应&#xff0c;形成一层致密的氧化层。这…...

Visual C++运行库合集:解决Windows程序依赖的终极方案

Visual C运行库合集&#xff1a;解决Windows程序依赖的终极方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否遇到过这样的烦恼&#xff1f;刚下载了一个…...

Python 中的 @property:像访问属性一样调用方法

# Python 中的 property&#xff1a;像访问属性一样调用方法在写类的时候&#xff0c;我们经常会遇到一个问题&#xff1a; 对象的属性如果可以被随便修改&#xff0c;就可能出现一些不合理的数据。比如一个人的年龄&#xff1a;python class Person:def __init__(self, age)…...

微积分入门书籍之高考篇

导数的秘密&#xff08;第二版&#xff09;-2021.01 高考导数满分精讲&#xff08;2021&#xff09; 高考导数探秘&#xff1a;解题技巧与策略 董晟渤&#xff08;2024.10&#xff09; 微积分与高考数学&#xff08;第2版&#xff09;-2024 高考导数解题全攻略&#xff08;2024…...