網(wǎng)站建設(shè)怎樣找客戶2023年9月疫情又開始了嗎
文章目錄
- 概要:本期主要介紹Qt解析JSON數(shù)據(jù)格式文件的方式。
- 一、JSON數(shù)據(jù)格式
- 1.JSON類似于XML,在JSON文件中,==有且只有一個根節(jié)點
- 2.JSON有兩種主流包含型構(gòu)造字符:{對象}、[數(shù)組]
- 3.JSON的值主要包括:對象、數(shù)組、數(shù)字、字符串以及三種字面值(ture、fasle、null)
- 4.JOSN中的對象和數(shù)組是可以互相作為對方的子元素,形成復(fù)雜的嵌套結(jié)構(gòu),可以表達(dá)出完整的流程。
- 二、Qt中對于JSON數(shù)據(jù)格式的處理
- 1.QJsonDocument
- 2.QJsonObject
- 3.QJsonArray
- 4.QJsonValue
- 三、Qt解析JSON數(shù)據(jù)格式
- 簡述實現(xiàn)步驟:
- 1.將json文件轉(zhuǎn)為QJsonDocument對象
- 2.通過isObject或者isArray來獲取QJsonObejct對象或者QJsonArray對象
- 3.QJsonObject對象類似map容器,通過鍵值對存儲??梢酝ㄟ^獲取所有key,遍歷獲取所有值.值的類型是QJsonValue,可以轉(zhuǎn)成對象、數(shù)組、數(shù)字、字符串、布爾。
- 4.QJsonArray對象類似數(shù)組,可以直接通過下標(biāo)訪問,值的類型是QJsonValue,可以轉(zhuǎn)成對象、數(shù)組、數(shù)字、字符串、布爾。
- 結(jié)尾
概要:本期主要介紹Qt解析JSON數(shù)據(jù)格式文件的方式。
一、JSON數(shù)據(jù)格式
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。易于人閱讀和編寫,可以在多種語言之間進(jìn)行數(shù)據(jù)交換。同時也易于機(jī)器解析和生成。相對于Xml數(shù)據(jù)格式,有更好的可讀性,并且在網(wǎng)絡(luò)傳輸中有更好的傳輸效率。
1.JSON類似于XML,在JSON文件中,==有且只有一個根節(jié)點
2.JSON有兩種主流包含型構(gòu)造字符:{對象}、[數(shù)組]
3.JSON的值主要包括:對象、數(shù)組、數(shù)字、字符串以及三種字面值(ture、fasle、null)
4.JOSN中的對象和數(shù)組是可以互相作為對方的子元素,形成復(fù)雜的嵌套結(jié)構(gòu),可以表達(dá)出完整的流程。
二、Qt中對于JSON數(shù)據(jù)格式的處理
Qt5之后,新增了對JSON數(shù)據(jù)格式的解析類:QJsonDocument、QJsonObject、QJsonArrary、QJsonValue。
1.QJsonDocument
JSON文檔類。
JsonFormat
{
“Array”: [
true,
999,
“string”
],
“Key”: “Value”,
“null”: null
}
2.QJsonObject
JSON的對象類,由鍵值對組成,也就是QString和QJsonValue組成。
3.QJsonArray
JSON的數(shù)組類,由一系列的JSON的值(QJsonValue)組成
4.QJsonValue
JSON的值。可以是bool、數(shù)字、字符串、數(shù)組、對象。
三、Qt解析JSON數(shù)據(jù)格式
這里僅解析簡單的不含嵌套結(jié)構(gòu)的json文件,因為json文件和xml文件一樣,如果不知道其內(nèi)部的構(gòu)造結(jié)構(gòu),解析出來比較麻煩,但是,如果你清楚其內(nèi)部結(jié)構(gòu),就可以通過下述解析方法,輕松地解析出想要的數(shù)據(jù)。
簡述實現(xiàn)步驟:
1.將json文件轉(zhuǎn)為QJsonDocument對象
2.通過isObject或者isArray來獲取QJsonObejct對象或者QJsonArray對象
3.QJsonObject對象類似map容器,通過鍵值對存儲??梢酝ㄟ^獲取所有key,遍歷獲取所有值.值的類型是QJsonValue,可以轉(zhuǎn)成對象、數(shù)組、數(shù)字、字符串、布爾。
4.QJsonArray對象類似數(shù)組,可以直接通過下標(biāo)訪問,值的類型是QJsonValue,可以轉(zhuǎn)成對象、數(shù)組、數(shù)字、字符串、布爾。
QVector<QString> JsonOperate::ParseJsonFile(QString _path)
{QVector<QString> _vec ;_vec.clear();QDir _dir(_path);QFile _file(_dir.absoluteFilePath(_path));//創(chuàng)建文件對象if(!_file.exists()){qDebug()<<QString::fromLocal8Bit("不存在該文件!")<<endl;return _vec;}if(!_file.open(QIODevice::ReadOnly)){qDebug()<<QString::fromLocal8Bit("文件打開失敗!")<<endl;return _vec;}QByteArray _byte = _file.readAll();QJsonParseError _error;QJsonDocument _doc = QJsonDocument::fromJson(_byte,&_error);//將json文件中的內(nèi)容轉(zhuǎn)成json文件對象_file.close();//開始解析QJsonObject _obt;QJsonArray _array;if(_doc.isObject())//根節(jié)點是json對象{_obt = _doc.object();//獲取對應(yīng)json對象QStringList _keys = _obt.keys();for(int i = 0;i < _keys.count();i ++)//將每個鍵值對組成 kes : value 的字符串格式{QString _tempStr = _keys.at(i);_tempStr += ":";_tempStr += _obt.value(_keys[i]).toString();_vec.push_back(_tempStr);}}else{_array = _doc.array();//獲取對應(yīng)json數(shù)組for(int i = 0;i < _array.count();i ++){QString _tempStr = _array.at(i).toString();_vec.push_back(_tempStr);}}return _vec;
}
結(jié)尾
上面的解析方式僅適用于Qt5,如果是只使用C++的話,可以使用GitHub上jsoncpp庫來解析JSON文件,用法也很簡單:)