最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

關(guān)于c++結(jié)構(gòu)體的序列化與反序列化

2023-08-21 23:58 作者:yueyue1647092344  | 我要投稿

在現(xiàn)代軟件開發(fā)中,協(xié)議交互是不可或缺的一部分。協(xié)議交互使得不同的系統(tǒng)能夠相互通信和交換數(shù)據(jù),而JSON(JavaScript Object Notation)作為一種輕量級的數(shù)據(jù)交換格式,被廣泛應(yīng)用于協(xié)議交互中。?

首先,讓我們來看一下JSON的結(jié)構(gòu)。JSON使用鍵值對的方式來表示數(shù)據(jù),這種結(jié)構(gòu)非常適合在不同的編程語言之間進(jìn)行數(shù)據(jù)交換。它使用簡單的文本格式,易于理解和編寫,同時(shí)也易于解析和生成。這使得開發(fā)人員能夠快速地處理和解釋數(shù)據(jù),而無需復(fù)雜的解析邏輯。?

其次,JSON具有高度的可讀性。與其他數(shù)據(jù)交換格式相比,如XML,JSON的語法更簡潔、更直觀。它使用了常見的數(shù)據(jù)類型,如字符串、數(shù)字、布爾值和數(shù)組。這使得開發(fā)人員能夠輕松地讀取和理解數(shù)據(jù),無需額外的文檔或解釋。?

?此外,JSON具有良好的兼容性。它可以很容易地與其他編程語言進(jìn)行集成,并且可以在不同的平臺(tái)和環(huán)境中無縫地進(jìn)行數(shù)據(jù)交換。這種靈活性使得開發(fā)人員能夠選擇他們熟悉和喜歡的編程語言進(jìn)行開發(fā),而不必?fù)?dān)心數(shù)據(jù)交換的問題。 JSON還具有可擴(kuò)展性。開發(fā)人員可以根據(jù)自己的需求定義自定義的數(shù)據(jù)結(jié)構(gòu),并將其嵌入到JSON中。這使得協(xié)議交互更加靈活和適應(yīng)性強(qiáng),可以滿足各種不同的需求。?

最后,JSON具有廣泛的支持和社區(qū)。幾乎所有現(xiàn)代編程語言都有JSON的解析和生成庫,這使得開發(fā)人員能夠輕松地在他們的項(xiàng)目中使用JSON。此外,開發(fā)人員可以從社區(qū)中獲取大量的資源、教程和示例代碼,以幫助他們更好地使用JSON進(jìn)行協(xié)議交互。?

綜上所述,JSON作為一種簡單、可讀性高、兼容性好、可擴(kuò)展性強(qiáng)的數(shù)據(jù)交換格式,為程序員們提供了一種方便、高效的方式來進(jìn)行協(xié)議交互。無論是在Web開發(fā)、移動(dòng)應(yīng)用開發(fā)還是其他領(lǐng)域,JSON都是不可或缺的工具之一。?

今天為大家推薦一個(gè)十分好用的序列化工具庫,可將c++中的結(jié)構(gòu)體轉(zhuǎn)化為json結(jié)構(gòu)字符串,這樣更加的便于程序員開發(fā)與外部程序進(jìn)行協(xié)議交互。?

以下舉例如何使用:?

首先我們已知協(xié)議文檔如下:?

變量中文名 ? ?變量名稱 ? ?類型 ? ?

? ? ?姓名 ? ? ? ? ? ?name ? ? string ? ? ?

? ? ?年齡 ? ? ? ? ? ? ?age ? ? ? ? int ? ?

? ? ?工資 ? ? ? ? ? ?salary ? ?double ? ?

? ? ? 性別 ? ? ? ? ? ? ?sex ? ? ? bool(true為男,false為女)

則我們可以在c++中定義以下結(jié)構(gòu)體:

struct Programmer?

{?

std::string ?name;//姓名

int age;//年齡

double salary;//薪資

bool sex;//性別?

};?

將結(jié)構(gòu)體定義為宏,為了后邊序列化反序列化能找到該結(jié)構(gòu)體?

REFLECTION(Programmer, name, age, salary, sex)?

包含頭文件

#include <iostream>?

#include <iguana/json_serializer.hpp>?

int main()?

{?

Programmer test;?

test.name = “小王”;?

test.age = 20;?

test.salary = 3500.00;?

test.sex = true;?

std::string text = iguana::JsonSearializer::Searialize(test);//將類序列化為文本 std::cout<<text<<std::endl;?

Programmer test1;?

iguana::JsonSearializer::Desearialize(text,test1);//反序列化到類中 std::cout<<test1.name<<endl;?

}?

輸出為: {"name":"小王","age":20,"salary":3500.000000,"sex":true}?

“小王”?

這樣,我們就可以簡單的通過c++的結(jié)構(gòu)體來進(jìn)行json字符串的協(xié)議對接了。?

注:此庫需要c++17及以上才可用,若有大家有c++低版本需求后續(xù)可出低版本教程

若大家需要源碼,歡迎移步我的知識星球或私信我。

https://wx.zsxq.com/dweb2/index/group/48884884442118

關(guān)于c++結(jié)構(gòu)體的序列化與反序列化的評論 (共 條)

分享到微博請遵守國家法律
浮梁县| 巴彦淖尔市| 泸水县| 岳阳市| 安岳县| 泸水县| 大理市| 宝清县| 桃园市| 湘潭县| 思南县| 攀枝花市| 东乌珠穆沁旗| 沈阳市| 封丘县| 南川市| 澜沧| 务川| 灵台县| 都兰县| 瑞昌市| 嵊州市| 南京市| 正阳县| 南乐县| 关岭| 嘉荫县| 边坝县| 沁源县| 柞水县| 玉山县| 温宿县| 海淀区| 邯郸县| 南充市| 鹤山市| 镇雄县| 莆田市| 宁夏| 富蕴县| 溧阳市|