国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

rust學(xué)習(xí)-json的序列化和反序列化

這篇具有很好參考價(jià)值的文章主要介紹了rust學(xué)習(xí)-json的序列化和反序列化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

由于 serde 庫(kù)默認(rèn)使用 JSON 格式進(jìn)行序列化和反序列化
因此程序?qū)⑹褂?JSON 格式對(duì)數(shù)據(jù)進(jìn)行序列化和反序列化

社區(qū)為 Serde 實(shí)現(xiàn)的部分?jǐn)?shù)據(jù)格式列表:

  • JSON:廣泛使用的 JavaScript 對(duì)象符號(hào),用于許多 HTTP API
  • Postcard:no_std 和嵌入式系統(tǒng)友好的緊湊二進(jìn)制格式。
  • CBOR:用于小消息大小且無(wú)需版本協(xié)商的簡(jiǎn)潔二進(jìn)制對(duì)象表示法。
  • YAML:自稱為“人類友好”的配置語(yǔ)言(不是標(biāo)記語(yǔ)言)。
  • MessagePack:類似于緊湊 JSON 的高效二進(jìn)制格式。
  • TOML:Cargo 使用的最小配置格式。
  • Pickle:Python 世界中常見(jiàn)的格式。
  • RON:一種 Rust 對(duì)象表示法。
  • BSON:MongoDB 使用的數(shù)據(jù)存儲(chǔ)和網(wǎng)絡(luò)傳輸格式。
  • Avro:用于 Apache Hadoop 內(nèi)部的二進(jìn)制格式,支持模式定義。
  • JSON5:包括 ES5 中的某些生成的 JSON 超集。
  • URL 查詢字符串,x-www-form-urlencoded 格式。
  • Starlark:由 Bazel 和 Buck 構(gòu)建系統(tǒng)用于描述構(gòu)建目標(biāo)的格式。(僅序列化)
  • Envy:將環(huán)境變量反序列化為 Rust 結(jié)構(gòu)的一種方式。(僅反序列化)
  • Envy Store:將 AWS Parameter Store 參數(shù)反序列化為 Rust 結(jié)構(gòu)的一種方式。(僅反序列化)
  • S-表達(dá)式:Lisp 語(yǔ)言系列使用的代碼和數(shù)據(jù)的文本表示形式。
  • D-Bus 的二進(jìn)制線格式。
  • FlexBuffers:Google 的 FlatBuffers 無(wú)拷貝序列化格式的無(wú)模式表兄弟。
  • Bencode:BitTorrent 協(xié)議中使用的簡(jiǎn)單二進(jìn)制格式。
  • Token 流,用于處理 Rust 過(guò)程宏輸入。(僅反序列化)
  • DynamoDB 項(xiàng):rusoto_dynamodb 用于與 DynamoDB 傳輸數(shù)據(jù)的格式。
  • Hjson:圍繞人類閱讀和編輯而設(shè)計(jì)的 JSON 語(yǔ)法擴(kuò)展。(僅反序列化)

serde學(xué)習(xí)

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}"#;

	// 編譯器無(wú)法推斷變量或函數(shù)的類型,并需要使用類型注解來(lái)明確指定類型
	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}"#;

	// 編譯器無(wú)法推斷變量或函數(shù)的類型,并需要使用類型注解來(lái)明確指定類型
	let animal1: Animal = serde_json::from_str(json_str1).unwrap();
	println!("{:?}", animal1)
}

打印內(nèi)容如下

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

更新序列化的值

該場(chǎng)景在業(yè)務(wù)中貌似不會(huì)用到?。?!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-655443.html

use serde::{
   Serialize, Deserialize, Serializer, Deserializer};

#[derive(Serialize, Deserialize, Debug)]
struct Animal {
   
    #[serde(serialize_with = "serialize_name", deserialize_with = "deserialize_name")]
    // 上述serde僅處理Nme
    NaMe: String,
    AgE: u32,
}

// 使用 serde 庫(kù)自定義的序列化和反序列化函數(shù)
// 在序列化和反序列化期間自定義字段的名稱,并使用自定義的名稱序列化和反序列化數(shù)據(jù)
fn serialize_name<S>(name: &String, serializer: S) -> Result<S::Ok, S::Error>
where
    S: Serializer,
{
   
	// 將輸入字符串轉(zhuǎn)換為大寫并序列化
    serializer.serialize_str(&name.to_uppercase())
}

fn deserialize_name<'de, D>(deserializer: D) -> Result<String, D::Error>
where
    D: Deserializer<'de>,
{
   
    let name = String::deserialize(deserializer)?;
    // 獲取輸入字符串 name,并使用 name.to_lowercase() 將其轉(zhuǎn)換為小寫形式
	Ok(name.to_lowercase())
}

fn main() {
   
	let animal = Animal {
   
		

到了這里,關(guān)于rust學(xué)習(xí)-json的序列化和反序列化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【探索Linux】P.30(序列化和反序列化 | JSON序列化庫(kù) [ C++ ] )

    【探索Linux】P.30(序列化和反序列化 | JSON序列化庫(kù) [ C++ ] )

    當(dāng)談到網(wǎng)絡(luò)編程時(shí),序列化和反序列化是非常重要的概念。在上一篇文章中,我們已經(jīng)了解了在Linux環(huán)境下實(shí)現(xiàn)簡(jiǎn)單的TCP網(wǎng)絡(luò)程序的基礎(chǔ)知識(shí)。本文將繼續(xù)探討序列化和反序列化,這些概念對(duì)于在網(wǎng)絡(luò)上傳輸數(shù)據(jù)以及跨網(wǎng)絡(luò)通信至關(guān)重要。通過(guò)深入了解序列化和反序列化,我

    2024年04月08日
    瀏覽(33)
  • Spring Boot 中使用 ObjectMapper 進(jìn)行 JSON 序列化和反序列化

    在 Java 中,可以使用各種 JSON 序列化和反序列化工具將 Java 對(duì)象轉(zhuǎn)換為 JSON 字符串或者將 JSON 字符串轉(zhuǎn)換為 Java 對(duì)象。其中,Jackson 庫(kù)是比較常用的 JSON 序列化和反序列化工具之一,它提供了 ObjectMapper 類,用于將 Java 對(duì)象轉(zhuǎn)換為 JSON 字符串,或者將 JSON 字符串轉(zhuǎn)換為 Java 對(duì)象

    2024年02月14日
    瀏覽(20)
  • C#: Json序列化和反序列化,集合為什么多出來(lái)一些元素?

    C#: Json序列化和反序列化,集合為什么多出來(lái)一些元素?

    如下面的例子,很容易看出問(wèn)題: 如果類本身的無(wú)參構(gòu)造函數(shù),?就添加了一些元素,序列化,再反序列化,會(huì)導(dǎo)致元素增加。 如果要避免,必須添加: new JsonSerializerSettings() { ObjectCreationHandling = ObjectCreationHandling.Replace }

    2024年02月10日
    瀏覽(19)
  • cJSON(C語(yǔ)言JSON)庫(kù)(適用于嵌入式序列化和反序列化)

    cJSON(C語(yǔ)言JSON)庫(kù)(適用于嵌入式序列化和反序列化)

    JSON與序列化和反序列化 JSON (JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,它以易于閱讀和編寫的文本形式表示結(jié)構(gòu)化數(shù)據(jù)。JSON 格式廣泛用于將數(shù)據(jù)從一個(gè)應(yīng)用程序傳輸?shù)搅硪粋€(gè)應(yīng)用程序,特別是在Web應(yīng)用程序中,因?yàn)樗cJavaScript兼容,容易在客戶端和服務(wù)器之間進(jìn)

    2024年02月04日
    瀏覽(43)
  • 【Linux】序列化和反序列化

    【Linux】序列化和反序列化

    在網(wǎng)絡(luò)編程中,直接使用 結(jié)構(gòu)體 進(jìn)行數(shù)據(jù)傳輸會(huì)出錯(cuò),因?yàn)?本質(zhì)上socket無(wú)法傳輸結(jié)構(gòu)體 ,我們只有將結(jié)構(gòu)體裝換為字節(jié)數(shù)組,或者是字符串格式來(lái)傳輸,然后對(duì)端主機(jī)收到了數(shù)據(jù),再將其轉(zhuǎn)化為結(jié)構(gòu)體,這就是序列化和反序列化的過(guò)程! 序列化 (Serialization)是將對(duì)象的狀態(tài)

    2024年02月10日
    瀏覽(19)
  • 什么是序列化和反序列化?

    JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是兩種常用的數(shù)據(jù)交換格式,用于在不同系統(tǒng)之間傳輸和存儲(chǔ)數(shù)據(jù)。 JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,它使用易于理解的鍵值對(duì)的形式表示數(shù)據(jù)。JSON數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單明了,易于讀寫和解析,是基于JavaScript的一種常用數(shù)據(jù)

    2024年02月09日
    瀏覽(26)
  • Unity-序列化和反序列化

    序列化是指把對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程,而反序列化是指把字節(jié)序列恢復(fù)為對(duì)象的過(guò)程。序列化最主要的用途就是傳遞對(duì)象和保存對(duì)象。 在Unity中保存和加載、prefab、scene、Inspector窗口、實(shí)例化預(yù)制體等都使用了序列化與反序列化。 1 自定義的具有Serializable特性的非抽象、

    2024年01月24日
    瀏覽(27)
  • Java序列化和反序列化

    目錄 一、序列化和反序列化 二、Java序列化演示 三、反序列化漏洞 1、含義 ?序列化就是內(nèi)存中的對(duì)象寫入到IO流中,保存的格式可以是二進(jìn)制或者文本內(nèi)容。反序列化就是IO流還原成對(duì)象。 2、用途 (1)傳輸網(wǎng)絡(luò)對(duì)象 (2)保存Session 1、序列化 java.io.ObjectOutputStream代表對(duì)象

    2023年04月25日
    瀏覽(24)
  • Java序列化和反序列化機(jī)制

    在閱讀 ArrayList 源碼的時(shí)候,注意到,其內(nèi)部的成員變量動(dòng)態(tài)數(shù)組 elementData 被Java中的 transient 修飾 transient 意味著Java在序列化時(shí)會(huì)跳過(guò)該字段(不序列化該字段) 而Java在默認(rèn)情況下會(huì)序列化類(實(shí)現(xiàn)了 Java.io.Serializable 接口的類)的所有非瞬態(tài)(未被 transient 修飾

    2024年03月15日
    瀏覽(27)
  • jackjson自定義序列化和反序列化

    jackjson自定義序列化和反序列化

    JRT引用的jackjson作為json處理庫(kù)。由于JRT.ORM要求表不用datetime類型,把日期和時(shí)間用Int存儲(chǔ),所以O(shè)RM要支持日期時(shí)間的轉(zhuǎn)換。為什么要把日期時(shí)間不用datetime而用Int,比如日期:20240117,時(shí)間就是從0點(diǎn)到當(dāng)前的秒數(shù)。因?yàn)椴挥胐atetime兼容性好,不會(huì)因?yàn)椴煌瑤?kù)datetime函數(shù)不同而要

    2024年01月18日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包