欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間: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、對象、數(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讀取會使用的類(介紹讀取所使用的類在本文中的作用,個人理解)

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

三、Json文件的讀取

3.1 讀取Json串到QByteArray中

	QFile file("./jsonTest.json");	//創(chuàng)建QFile對象,并指定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判斷是否有錯

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

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

獲取QJsonObject對象

	QJsonObject jObj = jDoc.object();

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

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

獲取對象類型及其中的值

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

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

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

讀取組合類型的值

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

總結(jié)

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

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

相關(guān)文章

相關(guān)文章

  • C++中頭文件與源文件的作用詳解

    C++中頭文件與源文件的作用詳解

    這篇文章主要給大家介紹了關(guān)于C++中頭文件與源文件的作用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 使用C++遞歸求解跳臺階問題

    使用C++遞歸求解跳臺階問題

    這篇文章主要介紹了使用C++求解跳臺階問題的方法,通過遞歸算法來解決,不算難,文中給出了計算思路,需要的朋友可以參考下
    2016-02-02
  • C語言中的分支循環(huán)其嵌套語句

    C語言中的分支循環(huán)其嵌套語句

    這篇文章主要介紹了C語言中的分支循環(huán)其嵌套語句,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語言的遞歸函數(shù)詳解

    C語言的遞歸函數(shù)詳解

    這篇文章主要為大家介紹了C語言的遞歸函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • c++如何保存vector到文件

    c++如何保存vector到文件

    這篇文章主要介紹了c++如何保存vector到文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • FFmpeg進(jìn)階教程之給視頻添加文字水印

    FFmpeg進(jìn)階教程之給視頻添加文字水印

    FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計算機(jī)程序,下面這篇文章主要給大家介紹了關(guān)于FFmpeg進(jìn)階教程之給視頻添加文字水印的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • C語言中的三種循環(huán)語句

    C語言中的三種循環(huán)語句

    這篇文章主要介紹了C語言中的三種循環(huán)語句,在C語言中循環(huán)可分為3中,while循環(huán)、do - while循環(huán)、for 循環(huán)。下面小編就來為大家講解這三種循環(huán)語句,需要的朋友可以參考一下,希望對你有所幫助
    2021-10-10
  • C++實(shí)現(xiàn)二分法求方程近似解

    C++實(shí)現(xiàn)二分法求方程近似解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)二分法求方程近似解,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 應(yīng)用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    應(yīng)用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    相對于操作NandFlash,操作NorFlash相對簡單,因?yàn)榛静恍枰紤]壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關(guān)系。讀寫擦除相對容易,下面看個例子吧
    2013-12-12
  • C++中虛繼承時的構(gòu)造函數(shù)示例詳解

    C++中虛繼承時的構(gòu)造函數(shù)示例詳解

    在虛繼承中,虛基類是由最終的派生類初始化的,換句話說,最終派生類的構(gòu)造函數(shù)必須要調(diào)用虛基類的構(gòu)造函數(shù),這跟普通繼承不同,在普通繼承中,派生類構(gòu)造函數(shù)中只能調(diào)用直接基類的構(gòu)造函數(shù),不能調(diào)用間接基類的,所以本文將通過代碼示例給大家介紹一下C++虛繼承構(gòu)造函數(shù)
    2023-09-09

最新評論