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

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

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

1.介紹

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

2.jsoncpp

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

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

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

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

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

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

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

	// 獲取數(shù)組元素個數(shù) val["成績"].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序列化類,低版本用這個更簡單
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 序列化類,高版本推薦,如果用低版本的接口可能會有警告
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反序列化類,低版本用起來更簡單
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++第三方庫jsoncpp的文章就介紹到這了,更多相關(guān)C++第三方庫jsoncpp內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

    常用的C語言編程工具匯總

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

    C++項目中使用.dll 和.def 文件的操作指南

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

    一個快速排序算法代碼分享

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

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

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

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

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

    c語言單鏈表尾添加的深入講解

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

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

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

最新評論

扶绥县| 吉木萨尔县| 乐至县| 玛曲县| 桓仁| 马尔康县| 定安县| 咸阳市| 凌云县| 称多县| 江阴市| 大新县| 建水县| 宁河县| 年辖:市辖区| 新宾| 松阳县| 诏安县| 崇左市| 社旗县| 长春市| 莱州市| 奉新县| 通州市| 扬中市| 兴和县| 镇巴县| 荆门市| 叶城县| 青浦区| 桦甸市| 英吉沙县| 乌兰察布市| 双峰县| 封开县| 上饶市| 南江县| 竹溪县| 余姚市| 江陵县| 措勤县|