Qt讀取Json文件的方法詳解(含源碼+注釋)
一、示例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)文章
應(yīng)用程序操作NorFlash示例代碼分享(norflash接口使用方法)
相對(duì)于操作NandFlash,操作NorFlash相對(duì)簡(jiǎn)單,因?yàn)榛静恍枰紤]壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關(guān)系。讀寫擦除相對(duì)容易,下面看個(gè)例子吧2013-12-12C++中虛繼承時(shí)的構(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