Qt解析JSON
Qt解析JSON
文章目录
文中图片来自菜鸟教程runnob
QT 解析json的三件套,QJsonDocument、QJsonObject、QJsonArray、QJsonValue
要搞清楚这几个东西,首先得搞清楚JSON得结构。
JSON主要是有几种格式:
JSON主要格式
Object(对象)

图片中即为JSON中对象的格式,他由一对花括号({})作为包围,对象可以包含很多键值对(Key-Value),每个键(Key)用引号(“”)括起来,键和值之间用冒号分隔(:),值(Value)可以是bool、数字、字符串、对象、数组或者null。键值对之间用逗号(,)分开。
{
"type":1,
"msg":"Hello World!",
"nullable":true,
"member":["ZhangSan", "Lisi", "WangWu"],
"info":{
"name":"Zhangsan",
"id":"1"
}
}
这里就是一个键值对组成得对象。
Array(数组)

如图所示,数组是由一系列值(Value)得有序集合,值与值之间用逗号分开(,)。
[
"a", 1, true, null,
{
"name":"1",
"key":"123"
},
[1,2,3]
]
如上所示,这里就是一个JSON数组。
QT的JSON处理类
从上面JSON的分析,就可以大概知道怎么在QT去解析一个JSON字符串了。
QJsonObject
这里就是JSON的对象,由键值对组成,也就是QString和QJsonValue组成
QJsonArray
这里是JSON的数组,由一系列的JSON的值(QJsonValue)组成
QJsonValue
JSON的值。可以是bool、数字、字符串、数组、对象
QJsonDocument
JSON文档。
例子解析
想要解析JSON你首先得把一系列的JSON字符串转换成实例化的QJsonDocument对象,然后才能调用QJsonObject或者QJsonArray进行解析。
例子解析分析:
// 以下皆用初始化好了的QJsonDocument
QJsonDocument m_document;
QFile jsonFile("testJson.json");
file.open(QIODevice::ReadOnly);
QByteArray jsonBa = file.readAll();
QJsonParseError error;
m_document = QJsonDocument::fromJson(jsonBa, &error);
jsonFile.close();
解析基本的数组
["ZhangSan","Lisi","WangWu"]
解析步骤为:
- 获取对应的QJsonArray数组
- 用下标访问的方法,意义获取数组里的值QJsonValue
- 输出值的内容
代码实现如下:
// 开始解析
QJsonArray array;
if (m_document.isArray()) {
array = m_document.array();
} for (int i = 0; i < array.size(); i++) {
QJsonValue value = array.at(i);
qDebug() << value.toString();
}
解析基本的对象
{
"name":"Zhangsan",
"id":"1"
}
解析步骤为:
- 获取对应的QJsonObject对象
- 获取对象里的所有键(QString)
- 逐一输出键对应的值(QJsonValue)
代码实现如下:
// 开始解析
QJsonObject object;
if (m_document.isObject()) {
object = m_document.object();
} foreach (QString key, object.keys()) {
qDebug() << object.value(key).toString();
}
解析JSON数组组合JSON对象
[
{
"name":"Zhangsan",
"id":"1"
}, {"name":"Lisi",
"id":"2"
}, {
"name":"Wangwu",
"id":"2"
}
]
解析步骤为:
- 获取对应的QJsonArray数组
- 用下标访问的方式来获取值(QJsonValue)
- 如果其中一个值是对象(QJsonObject),就获取这个对象,然后按照对象的解析方法来解析。
代码实现如下:
QJsonArray array;
if (m_document.isArray()) {
array = m_document.array();
} for (int i = 0; i < array.size(); i++) {
if (array.at(i).isObject()) {
QJsonObject object = array.at(i).toObject(); if (object.contains("name")) {
qDebug() << object.value("name").toString();
}
}
}
解析JSON对象组合JSON数组
{
"type":"1",
"member":["Zhangsan", "Lisi", "Wangwu"]
}
解析步骤为:
- 获取对应的JSON对象(QJsonObject)
- 获取指定键对应的值(QJsonValue)
- 如果这个值是一个数组(QJsonArray),按照数组的解析方式来解析
代码实现如下:
QJsonObject object;
if (m_document.isObject()) {
object = m_document.object();
} if (object.contains("member")) {
QJsonArray array = object.value("member").toArray();
qDebug() << array[0].toString();
qDebug() << array[1].toString();
qDebug() << array[2].toString();
}
Qt解析JSON的更多相关文章
- Qt解析Json数据
1 JSON数据简介 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范) ...
- QT使用QJson生成解析Json数据的方法
QT中使用json还是比较方便的,下面用例子直接说明 举例子之前首先推荐一个在线解析json格式的网站,具体格式用法如下图所示: 之后根据这个格式进行json数据解析. QT使用json需要包含的头文 ...
- Qt之JSON生成与解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- 【转载】Qt之JSON生成与解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- QT解析嵌套JSON表达式
QT5开发环境集成了解析JSON表达式的库.使用很方便. 友情提示一下,好像在QT4环境里.须要到官网下载相关的库文件才干使用解析功能.话不多说,上代码 1.在pro文件里增加 QT += scrip ...
- Qt QJson解析json数据
Qt QJson解析json数据 //加载根目录文件 void TeslaManageData::loadRootFolderFiles() { QNetworkAccessManager *mana ...
- 更好更快更高效解析JSON说明
现在来一个实例解析类,直接就把解析JSON到QVariant去了.唯一不足的是没有搞错误处理,具体方法也请各位自行参考json-c的发行文档,这样比较方便叙述,STL或者Boost我都没有认真接触过, ...
- 使用QtScript库解析Json数组例子
本文转载自:http://blog.sina.com.cn/s/blog_671732440100uwxh.html 使用qtscipt库解析json数组首先在工程文件中加 QT += ...
- QJsonDocument实现Qt下JSON文档读写
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QJsonDocument实现Qt下JSON文档读写 本文地址:http://tech ...
- Qt读写Json
Qt操作Json 1.QJsonDocument 1.详细说明 QJsonDocument类提供了读写JSON文档的方法. QJsonDocument是一个封装了完整JSON文档的类,可以从基于UTF ...
随机推荐
- Qt编写安防视频监控系统47-基本设置
一.前言 一个系统中肯定有不少的配置参数存储在配置文件中,配置文件可以是ini文件,也可以是json文件,还可以是自定义格式的文本文件,本人比较推荐ini文件,读写节点极其方便,支持中文内容,各种Qt ...
- Qt编写的项目作品34-雷达模拟仿真工具(雨田哥作品)
一.功能特点 支持音频频谱显示. 支持任意随机添加模拟点. 支持自定义添加模拟点. 支持方位.航向角.距离.速度.目标体真实图自定制. 支持危险区域范围显示. 支持激光发射模拟. 支持雷达图放大缩小显 ...
- 鸿蒙OS开发秘籍:打造优雅的登录状态管理系统
一.前言 在鸿蒙OS开发过程中,随着应用规模的扩大,登录状态管理逐渐成为系统设计中的一个挑战.一个清晰.高效的登录状态管理系统不仅可以简化开发流程,还能提升用户体验.本文将分享一种优雅的登录状态管理设 ...
- [转]vue 项目npm install 报错 npm ERR! enoent undefined ls-remote -h -t ssh://git@github.com/sohee-lee7/Sq
npm install出错的解决办法 很多小伙伴可能跟我一样是个小白,还不知道怎么启动vue,然后就照着README一阵乱搞,然后npm install的时候就报了以下的错误,网上的解决办法也看不懂, ...
- Matlab R2009b 版 license 到期问题
打开2009b Matlab,反复提示需要激活,是lisense到期了,到期时间2017年11月11日.解决方法: 将以下内容替换 Matlab 安装路径下 license/*.lic 文件中的所有内 ...
- asp.net mvc中换肤机制类库 ThemedViewEngines
制作blog系统或者通用cms系统的时候,我们经常会用到Theme功能.asp.net mvc中的一种实现方式,是继承实现RazorViewEngine即可. 这是在GitHub中找到的一个示例:ht ...
- 前端学习openLayers配合vue3(获取矢量图的个数,省份的个数)
矢量图层绘制了一个中国地图,我们获取一下矢量图层的个数 关键代码 map .getLayers()//获取所有图层 .item(1)//获取矢量图层 .getSource() .on("ch ...
- CDS标准视图:安排维护计划的调用 I_MAINTENANCEPLANSCHEDULE
视图名称:安排维护计划的调用 I_MAINTENANCEPLANSCHEDULE 视图类型: 视图代码: 点击查看代码 @AbapCatalog.compiler.compareFilter: tru ...
- CDS标准视图:维护策略数据 I_MaintenanceStrategyData
视图名称:维护策略数据 I_MaintenanceStrategyData 视图类型:基础视图 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IMAINTSTRATD ...
- w3cschool-微信小程序开发文档-框架
https://www.w3cschool.cn/weixinapp/1g7f1q8l.html MINA文件结构 文件结构 MINA程序包含一个描述整体程序的app和多个描述各自页面的page. 一 ...