最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++第三方庫(kù)jsoncpp超詳細(xì)講解

 更新時(shí)間:2024年10月15日 11:01:15   作者:DieSnowK  
這篇文章主要介紹了C++第三方庫(kù)jsoncpp的相關(guān)資料,JSONcpp是一個(gè)在C++中用于處理JSON數(shù)據(jù)的庫(kù),支持JSON格式的序列化和反序列化,通過JSONcpp,可以輕松地將數(shù)據(jù)對(duì)象組織成JSON格式的字符串,需要的朋友可以參考下

1.介紹

  • json是一種數(shù)據(jù)交換格式,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)
  • json數(shù)據(jù)類型:對(duì)象、數(shù)組、字符串、數(shù)字
    • 對(duì)象:使用{}括起來(lái)的表示一個(gè)對(duì)象
    • 數(shù)組:使用[]括起來(lái)的表示一個(gè)數(shù)組
    • 字符串:使用""括起來(lái)的表示一個(gè)字符串
    • 數(shù)字:包括整形和浮點(diǎn)型,直接使用

2.jsoncpp

jsoncpp庫(kù)用于實(shí)現(xiàn)json格式的序列化和反序列化,完成將多個(gè)數(shù)據(jù)對(duì)象組織成為格式字符串解析得到多個(gè)數(shù)據(jù)對(duì)象的功能

主要借助三個(gè)類以及其對(duì)應(yīng)的少量成員函數(shù)完成

// Json數(shù)據(jù)對(duì)象類 -> 用于進(jìn)行中間數(shù)據(jù)存儲(chǔ)
class Json::Value
{
	// Value重載了[]和=,因此所有的賦值和獲取數(shù)據(jù)都可以通過[]實(shí)現(xiàn)
	Value &operator=(const Value &other);

	// 簡(jiǎn)單的方式完成 val["姓名"] = "SnowK";
	Value& operator[](const std::string& key);
	Value& operator[](const char* key);

	// 移除元素
	Value removeMember(const char* key);

	// val["成績(jī)"][0]
	const Value& operator[](ArrayIndex index) const; 

	// 添加數(shù)組元素val["成績(jī)"].append(88); 
	Value& append(const Value& value);

	// 獲取數(shù)組元素個(gè)數(shù) val["成績(jī)"].size();
	ArrayIndex size() const;

	// 轉(zhuǎn)string   string name = val["name"].asString();
	std::string asString() const;

	// 轉(zhuǎn)char*   char *name = val["name"].asCString();
	const char* asCString() const;

	// 轉(zhuǎn)int  int age = val["age"].asInt();
	int asInt() const;              

	// 轉(zhuǎn)float
	float asFloat() const;

	// 轉(zhuǎn) bool
	bool asBool() const;
};

//json序列化類,低版本用這個(gè)更簡(jiǎn)單
class JSON_API Writer 
{
	virtual std::string write(const Value& root) = 0;
}

class JSON_API FastWriter : public Writer 
{
	virtual std::string write(const Value& root);
}

class JSON_API StyledWriter : public Writer 
{
	virtual std::string write(const Value& root);
}

//json 序列化類,高版本推薦,如果用低版本的接口可能會(huì)有警告
class JSON_API StreamWriter 
{
	virtual int write(Value const& root, std::ostream* sout) = 0;
}

class JSON_API StreamWriterBuilder : public StreamWriter::Factory 
{
	virtual StreamWriter* newStreamWriter() const;
}

// json反序列化類,低版本用起來(lái)更簡(jiǎn)單
class JSON_API Reader 
{
	bool parse(const std::string& document, 
			   Value& root, bool collectComments = true);
}

// json反序列化類,高版本更推薦
class JSON_API CharReader 
{
	virtual bool parse(char const* beginDoc, char const* endDoc, 
					   Value* root, std::string* errs) = 0;
}

class JSON_API CharReaderBuilder : public CharReader::Factory 
{
	virtual CharReader* newCharReader() const;
}

3.使用

1.main.cc

int main()
{
    char name[] = "SnowK";
    int age = 18;
    float score[3] = {100, 99, 98};

    Json::Value stu;
    stu["Name"] = name;
    stu["Age"] = age;
    stu["Score"].append(score[0]);
    stu["Score"].append(score[1]);
    stu["Score"].append(score[2]);

    std::string str;
    if(Serialize(stu, str) == false)
    {
        return -1;
    }
    std::cout << str << std::endl;
    std::cout << "-------------------------------" << std::endl;

    Json::Value val;
    if(UnSerialize(str, val) == false)
    {
        return -1;
    }

    std::cout << val["Name"].asString() << std::endl;
    std::cout << val["Age"].asInt() << std::endl;
    for (int i = 0; i < val["Score"].size(); i++)
    {
        std::cout << val["Score"][i].asInt() << std::endl;
    }

    return 0;
}

2.序列化

bool Serialize(const Json::Value &val, std::string &dest)
{
    // 由Json::StreamWriterBuilder生產(chǎn)出Json::StreamWriter
    Json::StreamWriterBuilder swb;
    std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());

    // 通過Json::StreamWrite的write()進(jìn)行序列化
    std::stringstream ss;
    if (sw->write(val, &ss) != 0)
    {
        std::cout << "Json序列化失敗" << std::endl;
        return false;
    }

    dest = ss.str();

    return true;
}

3.反序列化

bool UnSerialize(const std::string &src, Json::Value &val)
{
    Json::CharReaderBuilder crb;
    std::unique_ptr<Json::CharReader> cr(crb.newCharReader());

    std::string err;
    if (cr->parse(src.c_str(), src.c_str() + src.size(), &val, &err) == false)
    {
        std::cout << "json反序列化失敗: " << err << std::endl;
        return false;
    }

    return true;
}

總結(jié) 

到此這篇關(guān)于C++第三方庫(kù)jsoncpp的文章就介紹到這了,更多相關(guān)C++第三方庫(kù)jsoncpp內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 中同名函數(shù)的實(shí)現(xiàn)原理與使用(函數(shù)重載)

    C++ 中同名函數(shù)的實(shí)現(xiàn)原理與使用(函數(shù)重載)

    本文詳細(xì)介紹了函數(shù)重載在C++中的實(shí)現(xiàn)原理、使用規(guī)則、適用場(chǎng)景及優(yōu)勢(shì),并提供了避坑指南,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • C實(shí)現(xiàn)的非阻塞方式命令行端口掃描器源碼

    C實(shí)現(xiàn)的非阻塞方式命令行端口掃描器源碼

    這篇文章主要介紹了C實(shí)現(xiàn)的非阻塞方式命令行端口掃描器源碼,對(duì)于大家理解C端口掃描器有很大幫主,需要的朋友可以參考下
    2014-07-07
  • C++實(shí)現(xiàn)LeetCode(147.鏈表插入排序)

    C++實(shí)現(xiàn)LeetCode(147.鏈表插入排序)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(147.鏈表插入排序),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 常用的C語(yǔ)言編程工具匯總

    常用的C語(yǔ)言編程工具匯總

    c語(yǔ)言編程軟件適于編寫系統(tǒng)軟件,是學(xué)習(xí)編程的同學(xué)們的必備軟件。c語(yǔ)言一種非常強(qiáng)大的計(jì)算機(jī)語(yǔ)言,應(yīng)用非常廣泛,不僅僅是在軟件開發(fā)上,而且各類科研都會(huì)用到c語(yǔ)言。今天小編給大家匯總下C語(yǔ)言的編程工具
    2018-01-01
  • C++項(xiàng)目中使用.dll 和.def 文件的操作指南

    C++項(xiàng)目中使用.dll 和.def 文件的操作指南

    在 C++ 項(xiàng)目中,當(dāng)我們只有 sqlite3.dll 和 .def 文件,但沒有 .lib 文件時(shí),通常需要生成 .lib 文件以便項(xiàng)目鏈接或直接調(diào)用 sqlite3.dll,本文將介紹幾種方法來(lái)生成 .lib 文件,或者在不生成 .lib 文件的情況下直接調(diào)用 sqlite3.dll,需要的朋友可以參考下
    2025-07-07
  • 一個(gè)快速排序算法代碼分享

    一個(gè)快速排序算法代碼分享

    一個(gè)快速排序算法代碼一個(gè)快速排序算法代碼,代碼內(nèi)有注釋,大家參考使用吧
    2014-01-01
  • C++中的局部變量、全局變量、局部靜態(tài)變量、全局靜態(tài)變量的區(qū)別

    C++中的局部變量、全局變量、局部靜態(tài)變量、全局靜態(tài)變量的區(qū)別

    本文主要介紹了C++中的局部變量、全局變量、局部靜態(tài)變量、全局靜態(tài)變量的區(qū)別。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C程序結(jié)構(gòu)的入門

    C程序結(jié)構(gòu)的入門

    在我們學(xué)習(xí) C 語(yǔ)言的基本構(gòu)建塊之前,讓我們先來(lái)看看一個(gè)最小的 C 程序結(jié)構(gòu),在接下來(lái)的章節(jié)中可以以此作為參考
    2021-06-06
  • c語(yǔ)言單鏈表尾添加的深入講解

    c語(yǔ)言單鏈表尾添加的深入講解

    這篇文章主要給大家介紹了關(guān)于c語(yǔ)言單項(xiàng)鏈表尾添加的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C++ 實(shí)現(xiàn)高性能HTTP客戶端

    C++ 實(shí)現(xiàn)高性能HTTP客戶端

    HttpClient可以實(shí)現(xiàn)所有HTTP的方法,通過API傳輸接收HTTP消息。本文詳細(xì)講解了HttpClient,以及如何運(yùn)用C++實(shí)現(xiàn)HTTP客戶端,感興趣的朋友可以參考一下
    2021-08-08

最新評(píng)論

盐池县| 江永县| 中阳县| 绥德县| 濮阳市| 普兰县| 广西| 南京市| 宕昌县| 吴忠市| 正定县| 普兰店市| 喀喇沁旗| 潍坊市| 泰安市| 东莞市| 东莞市| 塘沽区| 类乌齐县| 莲花县| 惠州市| 夏津县| 靖宇县| 大田县| 莫力| 堆龙德庆县| 福鼎市| 迁西县| 华池县| 庄河市| 繁昌县| 贵定县| 苗栗市| 新龙县| 南宁市| 乐亭县| 棋牌| 精河县| 图木舒克市| 南昌市| 浑源县|