前提要點
json檔案,可通過鍵值的方式存儲你所需要的資料,斌且支援多種類型存儲,類似于一種結構化的資料庫,在讀取json檔案時可通過相對應的關鍵字精準擷取。他是一種樹狀結構,我們可以自己設定葉子的數量以及他所代表的寓意,指定每一個葉子的父親,以及父親的父親......
1. 首先擷取位址 讀取json檔案
```js
QFile file(QString::fromStdString(json));
bool bOpen = file.open(QIODevice::ReadOnly);
if (bOpen == false)
{
return item;
}
QByteArray data = file.readAll();
file.close();
```
讀取json檔案 那一定要知道他的位置,通過位置理由QFile庫 将檔案打開`QIODevice::ReadOnly`設定檔案為僅讀取模式,如果設為可讀可寫,在後面的處理資料中,以防檔案被中途修改。
2. 将資料轉化為json可讀
2.1、首先
```js
QJsonDocument doc = QJsonDocument::fromJson(data);//讀寫json文檔
if (!doc.isObject())
{
return item;
}
```
利用Qt自帶庫 擷取json内容 `QJsonDocument::fromJson(data)` 判斷是否為引用類型
2.2、顯示關鍵字所對應的内容
```
QStringList keys = obj.keys();
for(int i=0;i<keys.size();i++)
{
qDebug() << "key" << i << " is:" << keys.at(i);
}
```
此方法是通過關鍵字的位置來擷取關鍵字的内容,接下來将會使用另外一種方法:利用關鍵字讀取相對應的内容。
2.3、json檔案讀取的不同方式,以及他的類型
第一種json格式
json檔案 内容:
```
{
"optionA": "aaa",
"optionB": "bbbb",
"score": 3
}
```
解析代碼:
```
QJsonObject obj = doc.object();//封裝json對象
item.content = obj["content"].toString().toStdString();
item.optionA = obj["optionA"].toString().toStdString();
item.optionB = obj["optionB"].toString().toStdString();
item.score = obj["score"].toInt();//int 類型 直接toint 不用轉為字元串
```
以上執行個體可發現,json主要是由關鍵字與所對應值構成,斌給有其他别的類型,可以直接解析。QJsonObject是封裝一個json對象,可通過這個對象,使用以上方法來擷取關鍵字的内容。
【文章福利】Qt開發學習資料包、大廠面試題、技術視訊和學習路線圖,包括(Qt C++基礎,資料庫程式設計,Qt項目實戰、Qt架構、qt線程等等)有需要的可以進企鵝裙661714027領取哦~
(注:["content"]所對應的内容一定要是與json檔案中的關鍵字相同,否則解析成功)
第二種json格式
json檔案 内容:
```
{
"optionA": "aaa",
"optionB": "bbbb",
"score": 3
}
```
解析代碼:
```
QJsonObject obj = doc.object();//封裝json對象
item.content = obj["content"].toString().toStdString();
item.optionA = obj["optionA"].toString().toStdString();
item.optionB = obj["optionB"].toString().toStdString();
item.score = obj["score"].toInt();//int 類型 直接toint 不用轉為字元串
```
以上執行個體可發現,json
主要是由關鍵字與所對應值構成,斌給有其他别的類型,可以直接解析。QJsonObject是封裝一個json對象,可通過這個對象,使用以上方法來擷取關鍵字的内容。
(注:["content"]所對應的内容一定要是與json檔案中的關鍵字相同,否則解析成功)
第二種json格式
json檔案 内容:
```
"questinList": [{
"optionA": "aaa",
"optionB": "bbbb",
}, {
"optionA": "aaa",
"optionB": "bbbb",
}]
```
解析代碼:
```
QJsonArray questinlist = root["questinlist"].toArray();
for(int i = 0; i < questinlist.count(); i++)
{
QJsonObject obj = questinlist.at(i).toObject();
item.content = obj["content"].toString().toStdString();
item.optionA = obj["optionA"].toString().toStdString();
item.optionB = obj["optionB"].toString().toStdString();
data.questinList.push_back(item);
}
```
可通過json檔案發現 questinList是一個list 它内部存儲了許多的同樣類型的資料組,就像是一個媽媽與她的孩子們,他的孩子們都擁有一樣的基因,就是他們都擁有一樣的關鍵字,但是每個人又有所不懂,是以他們的關鍵字所對應的資料不一定全都一樣。一個媽媽就是一個Array,通過擷取媽媽孩子的數量,将每個孩子帶出來,然後轉移到另一個存儲他們的房子裡。