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

Qt讀取Json文件的方法詳解(含源碼+注釋)

 更新時(shí)間:2022年10月21日 10:34:01   作者:lw只吃億點(diǎn).  
QT本身就有讀取json的接口,簡單又方便,下面這篇文章主要給大家介紹了關(guān)于Qt讀取Json文件(含源碼+注釋)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、示例Json文件內(nèi)容

下方為本文所使用的Json文件的內(nèi)容,其中包含字符串、數(shù)值、布爾、null、對(duì)象、數(shù)組、組合類型等(讀取方式在本文第三節(jié))

{
	"str": "strVal",
	"number": 88,
	"bool": true,
	"null": null,

	"object": {
		"key1": "Val1",
		"key2": "Val2",
		"key3": "Val3"
	},

	"array": [
		"elem1",
		"elem2",
		"elem3",
		"elem4"
	],

	"combination": [{
			"name": "Google",
			"url": "http://www.google.com"
		},

		{
			"name": "Baidu",
			"url": "http://www.baidu.com"
		},

		{
			"name": "SoSo",
			"url": "http://www.SoSo.com"
		}
	]
}

二、Json讀取會(huì)使用的類(介紹讀取所使用的類在本文中的作用,個(gè)人理解)

  • QJsonParseError:用于報(bào)告JSON解析期間的錯(cuò)誤;當(dāng)JSON串格式有問題時(shí)會(huì)存儲(chǔ)錯(cuò)誤
  • QJsonDocument:提供了一種讀取和寫入JSON文檔的方法;
  • QJsonObject:用于讀取對(duì)象類型數(shù)據(jù)和接收從QJsonDocument對(duì)象中獲取的QJsonObject對(duì)象
  • QJsonArray:用于讀取數(shù)組類型數(shù)據(jù)

三、Json文件的讀取

3.1 讀取Json串到QByteArray中

	QFile file("./jsonTest.json");	//創(chuàng)建QFile對(duì)象,并指定json文件路徑
	//打開json文件并判斷(不成功則返回0)
    if(!file.open(QIODevice::ReadOnly))
        return 0;
    //將文件內(nèi)容讀取到數(shù)組中
    QByteArray data(file.readAll());
    file.close();	//關(guān)閉文件

3.2 讀取Json串到QJsonDocument,并使用QJsonParseError判斷是否有錯(cuò)

	QJsonParseError jError;	//創(chuàng)建QJsonParseError對(duì)象
	//使用QJsonDocument的fromJson函數(shù)讀取json串,并將QJsonParseError對(duì)象傳入獲取錯(cuò)誤值
    QJsonDocument jDoc = QJsonDocument::fromJson(data, &jError);	
    //判斷QJsonParseError對(duì)象獲取的error是否包含錯(cuò)誤,包含則返回0
    if(jError.error != QJsonParseError::NoError)
        return 0;

3.3 獲取QJsonObject,并讀取Json串中各類型的值

獲取QJsonObject對(duì)象

	QJsonObject jObj = jDoc.object();

獲取常規(guī)類型的值

	//讀取字符串
    QString strVal = jObj["str"].toString();
    //讀取數(shù)值(對(duì)應(yīng)的數(shù)值轉(zhuǎn)換成對(duì)應(yīng)的類型)
    int numVal = jObj["number"].toInt();
    //讀取邏輯值
    bool boolVal = jObj["bool"].toBool();
    //讀取空值(因其沒有對(duì)應(yīng)的to類型函數(shù),可使用下方類型接收或isNull()函數(shù)判斷)
    QVariant nullVal = jObj["null"].toVariant();

獲取對(duì)象類型及其中的值

    //對(duì)象類型需要使用新的QJsonObject對(duì)象存放,然后使用新的QJsonObject獲取其中值
    QJsonObject jObj2 = jObj["object"].toObject();
    //獲取jObj2中指定鍵的值(值對(duì)應(yīng)的類型直接使用對(duì)應(yīng)函數(shù)轉(zhuǎn))
    QString key1Val = jObj2["key1"].toString();

獲取數(shù)組類型及其中的值

    //對(duì)象類型需要使用QJsonArray對(duì)象存放
    QJsonArray jArr = jObj["array"].toArray();
    //獲取jArr中指定下標(biāo)的值(該值可通過如下方式接收或使用QJsonValue的對(duì)象接收)
    QString arr1Val = jArr.at(0).toString();

讀取組合類型的值

    //組合對(duì)象第一層類型為數(shù)組,需要使用QJsonArray對(duì)象存放
    QJsonArray jArr2 = jObj["combination"].toArray();
    //數(shù)組中存放的對(duì)象,使用QJsonObject接收
    QJsonObject jObj3 = jArr2.at(0).toObject();
    //獲取對(duì)象中的指定鍵的值
    QString name = jObj3["name"].toString();

總結(jié)

建議學(xué)習(xí)前先了解一下Json文件格式,其次為在編寫代碼的過程中需要細(xì)心,類似的對(duì)象名容易混淆

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

相關(guān)文章

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(12.整數(shù)轉(zhuǎn)化成羅馬數(shù)字)

    C++實(shí)現(xiàn)LeetCode(12.整數(shù)轉(zhuǎn)化成羅馬數(shù)字)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(12.整數(shù)轉(zhuǎn)化成羅馬數(shù)字),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++程序檢測(cè)內(nèi)存泄漏的方法分享

    C++程序檢測(cè)內(nèi)存泄漏的方法分享

    這篇文章主要介紹了C++程序檢測(cè)內(nèi)存泄漏的方法分享,本文講解了、對(duì)象計(jì)數(shù)、重載new和delete、Hook Windows系統(tǒng)API、使用DiagLeak檢測(cè)等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • C++實(shí)現(xiàn)圖書管理系統(tǒng)

    C++實(shí)現(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++11?nullptr實(shí)現(xiàn)初始化空指針

    C++11?nullptr實(shí)現(xiàn)初始化空指針

    避免產(chǎn)生“野指針”最有效的方法,就是在定義指針的同時(shí)完成初始化操作,本文主要介紹了C++11?nullptr初始化空指針,感興趣的可以了解一下
    2022-01-01
  • 使用C++實(shí)現(xiàn)工資管理中的隨機(jī)教師信息生成功能

    使用C++實(shí)現(xiàn)工資管理中的隨機(jī)教師信息生成功能

    這篇文章主要介紹了使用C++實(shí)現(xiàn)工資管理中的隨機(jī)教師信息生成功能,想要做一個(gè)教師工資管理系統(tǒng),就必須得準(zhǔn)備好數(shù)據(jù),但是這些數(shù)據(jù)如果用手一行一行地敲,那么工作量是非常大的,因此,我就產(chǎn)生了用C語言實(shí)現(xiàn)直接生成大量的教師基本信息的想法,需要的朋友可以參考下
    2023-05-05
  • 深入探究C++ string的內(nèi)部究竟是什么樣的

    深入探究C++ string的內(nèi)部究竟是什么樣的

    這篇文章主要給大家介紹了關(guān)于C++ string的內(nèi)部究竟是什么樣的,文中通過示例代碼的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C++中strlen函數(shù)的三種實(shí)現(xiàn)方法

    C++中strlen函數(shù)的三種實(shí)現(xiàn)方法

    在C語言中我們要獲取字符串的長度,可以使用strlen?函數(shù),strlen?函數(shù)計(jì)算字符串的長度時(shí),直到空結(jié)束字符,但不包括空結(jié)束字符,因?yàn)閟trlen函數(shù)時(shí)不包含最后的結(jié)束字符的,因此一般使用strlen函數(shù)計(jì)算的字符串的長度會(huì)比使用sizeof計(jì)算的字符串的字節(jié)數(shù)要小
    2022-05-05
  • C語言實(shí)現(xiàn)選票統(tǒng)計(jì)

    C語言實(shí)現(xiàn)選票統(tǒng)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)選票統(tǒng)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言預(yù)處理預(yù)編譯命令及宏定義詳解

    C語言預(yù)處理預(yù)編譯命令及宏定義詳解

    這篇文章主要為大家介紹了C語言預(yù)處理預(yù)編譯命令及宏定義的詳解,其中包含運(yùn)行環(huán)境命名約定條件及#under等基礎(chǔ)詳解,有需要的朋友可以借鑒參考下
    2021-10-10
  • QT實(shí)現(xiàn)秒表項(xiàng)目

    QT實(shí)現(xiàn)秒表項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)秒表項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論

罗甸县| 金川县| 滨州市| 神木县| 鄂托克前旗| 军事| 和林格尔县| 伊宁市| 玉门市| 永德县| 南通市| 盐边县| 武安市| 定南县| 九龙县| 玛纳斯县| 博罗县| 灌云县| 新兴县| 阿鲁科尔沁旗| 基隆市| 克山县| 枝江市| 玉田县| 讷河市| 依安县| 肥西县| 巩义市| 井冈山市| 西林县| 新河县| 定州市| 繁峙县| 香港 | 巴林左旗| 腾冲县| 洛浦县| 墨玉县| 平安县| 黄平县| 柳州市|