Qt讀取Json文件的方法詳解(含源碼+注釋)
一、示例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中指定下標的值(該值可通過如下方式接收或使用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文件格式,其次為在編寫代碼的過程中需要細心,類似的對象名容易混淆
到此這篇關(guān)于Qt讀取Json文件的文章就介紹到這了,更多相關(guān)Qt讀取Json文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
相關(guān)文章
C++實現(xiàn)LeetCode(12.整數(shù)轉(zhuǎn)化成羅馬數(shù)字)
這篇文章主要介紹了C++實現(xiàn)LeetCode(12.整數(shù)轉(zhuǎn)化成羅馬數(shù)字),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
C++中strlen函數(shù)的三種實現(xiàn)方法
在C語言中我們要獲取字符串的長度,可以使用strlen?函數(shù),strlen?函數(shù)計算字符串的長度時,直到空結(jié)束字符,但不包括空結(jié)束字符,因為strlen函數(shù)時不包含最后的結(jié)束字符的,因此一般使用strlen函數(shù)計算的字符串的長度會比使用sizeof計算的字符串的字節(jié)數(shù)要小2022-05-05

