日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt实现对json文件的解析

發布時間:2023/11/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文件的解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。