Qt实现对json文件的解析
生活随笔
收集整理的這篇文章主要介紹了
Qt实现对json文件的解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
???? ? json是一種輕量級的數據結構,其內部的結構是一種鍵值對(key-value)的組合,最外層是{ }。key是帶雙引號的字符串常亮,用于獲取和存儲;value的值可以是bool變量,字符串常量,對象或數組(也是一個key-value的組合,以 [ 開頭,以 ] 結尾),具體json格式介紹可參考博客:https://www.cnblogs.com/hwtblog/p/8483573.html
???? Qt中提供QJsonDocument,QJsonValue,QJsonObject,QjsonArray等類來實現對json文件的解析。以下面的json為例子,實現對json文件中數據的解析。
{“tunning params array” : [{"anc auto tuning filter count: 0,"anc mode" : "FFMode","anc params array" : [{"bypass" : true,"frequency": 5000,},{"bypass" : false,"frequency": 1000,}]},{"anc auto tuning filter count: 1,"anc mode" : "FBMode","anc params array" : [{"bypass" : true,"frequency": 5000,},{"bypass" : false,"frequency": 1000,}]}] }??? 實現對json文件數據的讀取,具體實現的API如下所示:
#include <QList> #include <QString> #include <QFile> #include <QJsonArray> #include <QJsonDocument> #include <QJsonParseError> #include <QJsonValue>struct AncParameter {bool bypass;int frequency; };struct TuningParameter {int ancAutoTuningFilterCount;QList<AncParameter> ancParaArray;QString ancMode; };QList<AncParameter> readParamsFromJsonFile(QString jsonFile) {QList<AncParameter> result;//打開json文件,讀取所有數據QFile file(jsonFile);if (!file.open(QIODevice::ReadOnly)) return result;QByteArray allData = file.readAll();file.close();//讀取具體的json數據QJsonParseError jsonError;QJsonDocument jsonDoc = QJsonDocument::fromJson(allData, &jsonError);if (jsonError != QJsonParseError.NoError) return result;if (!jsonDoc.isObject()) return result;QJsonObject rootObject = jsonDoc.object();if (rootObject.contains("tunning params array")) {QJsonValue ancTuningParaArray = rootObject.value("tunning params array");if (ancTuningParaArray.isArray()) {QJsonArray tuningParameterArray = ancTuningParaArray.toArray();for (int i = 0; i < tuningParameterArray.count(); i++) {QJsonValue tuningPara = tuningParameterArray[i];if (tuningPara.isObject()) {TuningParameter tuningParameter;QJsonObject tuningParameterObject = tuningPara.toObject();if (tuningParameterObject.contains("anc auto tuning filter count")) {QJsonValue ancAutoTuningFilterCount = tuningParameterObject.value("anc auto tuning filter count");if (ancAutoTuningFilterCount.isDouble())tuningParameter.ancAutoTuningFilterCount = (int)ancAutoTuningFilterCount.toDouble();} else if (tuningParameterObject.contains("anc mode")) {QJsonValue ancMode = ancParameterObject.value("anc mode");if (ancMode.isString()) {QString ancModeString = ancMode.toString();if (QString::compare("FFMode", ancModeString, Qt::CaseInsensitive))tuningParameter.ancMode = "FFMode";elsetuningParameter.ancMode = "FBMode";}} else if (tuningParameterObject.contains("anc params array")) {QJsonValue ancParameterArray = tuningParameterObject.value("anc params array");if (ancParameterArray.isArray()) {QJsonArray ancArray = ancParameterArray.toArray();for (int i = 0; i < ancArray.count(); i++) {AncParameter ancParameter;QJsonValue ancParaValue = ancArray[i];if (ancParaValue.contains("bypass")) {QJsonValue bypassValue = ancParaValue.value("bypass");if (bypassValue.isBool())ancParameter.bypass = bypassValue.toBool();} else if (ancParaValue.contains("frequency")) {QJsonValue frequencyValue = ancParaValue.value("frequency");if (frequencyValue.isDouble())ancParameter.bypass = (int)frequencyValue.toDouble();}tuningParameter.ancParaArray.append(ancParameter);}}}result.append(tuningParameter);}}}}return result; }?? 至于對json文件的存取,就是將list中的輸入數據寫入到 json文件中,原理類似。
總結
以上是生活随笔為你收集整理的Qt实现对json文件的解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php laravel,如何更高效地调试
- 下一篇: BP(blood point)系统是什么