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文件的解析相关推荐

  1. java实现对Json文件及字符串的格式美化及修改调整

    本文转载于原文链接:https://blog.csdn.net/weixin_41979002/article/details/128160841 一.前言 之前转载过一篇文章,也是有关于通过java ...

  2. [IOS开发教程] IOS中用NSJSONSerialization来实现对JSON格式的解析

    IOS中对JSON格式的解析通常可以采用NSJSONSerialization来实现. 如,我们可以用个简答的HTTP请求的方式获取JSON数据,(以下都是在playground中写的) var ur ...

  3. C#中使用Newtonsoft.Json实现对Json字符串的解析

    场景 假如获取了Json字符串 {"angle": -0.0064,"confidence": 0.637,"x": 3.5069,&quo ...

  4. 修改html时webpack热更新,利用webpack实现对html文件的热更新

    webpack中webpack-dev-server是一个简单的web服务器,能够帮助咱们实现代码的热更新,即在实际开发中只需保存修改完后的代码,不用手动刷新页面就能够看到效果.在使用webpack- ...

  5. EasyExcel实现对excel文件读写

    EasyExcel实现对excel文件读写 1.EasyExcel介绍 2.EasyExcel特点: 3.EasyExcel写操作 3.1 pom中引入xml相关依赖 3.2 创建实体类 3.3 实现 ...

  6. 通过java代码实现对json字符串的格式美化(完整版)

    一.前言 之前转载过一篇文章,也是有关于通过java代码实现对json字符串的格式美化,但是那篇文章的实现还不够完善,比如其对字符串中出现特殊字符时,会出现转换失败.因此博主本人也是闲暇时在那份代码的 ...

  7. 使用go语言GUI库实现对mp3文件的播放1(简单的播放mp3文件)

    使用go语言GUI库实现对mp3文件的播放1(简单的播放mp3文件) 使用beep播放mp3文件(10num) 使用go语言GUI库fyne实现音乐播放器 要是想使用go语言实现播放mp3需要借助be ...

  8. python对excel表统计视频教程_Python实现对excel文件列表值进行统计的方法

    本文实例讲述了Python实现对excel文件列表值进行统计的方法.分享给大家供大家参考.具体如下: #!/usr/bin/env python #coding=gbk #此PY用来统计一个execl ...

  9. android 访问服务器josn文件,Android客户端对服务器回来的json文件进行解析

    Android客户端对服务器返回的json文件进行解析 和解析XML的方式大同小异,只有解析方式存在区别: /** * 解析服务器返回来的json数据 * @param content * @retu ...

最新文章

  1. Install Qt5 on Ubuntu 16.04
  2. 青蛙捉昆虫的html游戏,幼儿园小班体育游戏教案《小青蛙捉害虫》
  3. java中volatile关键字的含义
  4. Hadoop与Spark常用配置参数总结
  5. 全球及中国农业保险市场营销状况与运营价值分析报告2022版
  6. jQuery实现下拉列表移动 效果
  7. 今天,在苏州落户了.
  8. Android开发之关于transformDexArchiveWithExternalLibsDexMergerForDebug java.lang.OutOfMemoryError问题的参考解决方案
  9. 解决Ajax不能跨域的方法
  10. 多个同名进程linux获取对应pid,Linux Shell根据进程名获取PID
  11. javascript DOM对象转jquery对象
  12. JavaSE基础——面向对象
  13. 腾讯视频弹幕爬取----------之亲爱的,热爱的
  14. 如何成为优秀的技术主管-管理篇
  15. 表的增删改查(一)(MySQL)
  16. Why do we insist? 打卡
  17. .net core3.1 abp学习开始(一)
  18. 电脑Mac地址更改后有什么害处?怎么改回原来的?
  19. android 高仿拼多多,Android 仿京东、拼多多商品分类页
  20. 康乐不风流之爱解题的pde灌水王张祖锦

热门文章

  1. hdu-1728(贪心bfs的灵活运用吧)
  2. 搭建mysql集群,使用Percona XtraDB Cluster搭建
  3. WebStrom Sass 编译配置 windows
  4. vray学习笔记(3)-多维子材质是个什么东西
  5. Ferguson游戏
  6. 解决git clone报错SSL certificate problem
  7. spring对事务的控制 AOP
  8. 简述WebService与.NET Remoting的区别及适应场合
  9. linux redis安装使用,linux安装redis
  10. blue html中转换,Vue/Vue中Html和Markdown互相转换/README.md · bluemoon/LearningNotes - Gitee.com...