Qt5 解析多级JSON 包

2023-10-27

 

Qt5 中包含了处理 JSON 的类,包含QJsonDocument、QJsonArray、QJsonObject),这些类在 QCore 模块中,不需要引入其它模块。

JSON基本语法规则:

JSON 语法是 JavaScript 对象表示语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组
  • JSON 数据的书写格式是:名称/值对。

(客户端)待解析的Json包如下:
{
    "HistoryData": {
		"position": {
			"Power": "1",
			"module": "1"
		},
		"during": {
			"startTime": "2017 - 01 - 02",
			"endTime": "2017 - 02 - 03"
		}
	}
}

解析的时候只要想清楚什么对象下面又包含什么对象,这样代码写起来就清晰了。

本代码只是针对多级对象的情况,不包含数组,解析代码如下:

void CClient::processTextMessage(QString message)   //我代码中的槽函数,接收客户端发过来的json
{
    if (message == "@heart")
    {
        return;
    }
    QString Cmd(message);
    QByteArray RequestCmd = Cmd.toLatin1();
    QJsonParseError jsonError;
    QJsonDocument DoucmentRequestCmd = QJsonDocument::fromJson(RequestCmd,&jsonError);
    if (!DoucmentRequestCmd.isNull() && (jsonError.error == QJsonParseError::NoError))
    {
        if(DoucmentRequestCmd.isObject())  //判断第一级对象是否存在
         {
            QJsonObject object = DoucmentRequestCmd.object();
            if(object.contains("HistoryData"))                //第一级对象
            {
                QJsonValue value = object.value("HistoryData");
                QList<QString> PowerStateList = CmdParse(value);
                for(int i = 0; i < PowerStateList.size(); i++)
                {
                    qDebug()<< PowerStateList.at(i);  //输出解析好的json数据
                }
            }
        }
    }
}

QList<QString> CClient::CmdParse(QJsonValue value)  //第二级对象解析函数
{
    QList<QString>list;  //容器保存json值
    if (value.isObject())  //判断第二级对象是否存在
    {
        QJsonObject obj = value.toObject();
        if (obj.contains("position"))
        {
            QJsonValue value = obj.value("position"); 
            if (value.isObject())  //判读第三级对象是否存在
            {
                QJsonObject obj = value.toObject();
                if(obj.contains("Power"))
                {
                    QJsonValue value = obj.value("Power");
                    if(value.isString())
                        list.append(value.toString());
                }
                if(obj.contains("module"))
                {
                    QJsonValue value = obj.value("module");
                    if(value.isString())
                        list.append(value.toString());
                }
            }
        }
        if(obj.contains("during"))     //与postion对象同为第二级对象
        {
            QJsonValue value = obj.value("during");
            if(value.isObject())
            {
                QJsonObject obj = value.toObject();
                if(obj.contains("startTime"))
                {
                    QJsonValue value = obj.value("startTime");
                    if(value.isString())
                        list.append(value.toString());
                }
                if(obj.contains("endTime"))
                {
                    QJsonValue value = obj.value("endTime");
                    if(value.isString())
                        list.append(value.toString());
                }
            }
        }
    }
    return list;   //返回解析好的json值
}

解析结果如下:



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt5 解析多级JSON 包 的相关文章

  • NGSIM数据集处理-添加标签、特征标准化

    添加标签 对向左向右换道数据添加不同的标签 usr bin env python coding utf 8 In 1 import csv import pandas as pd f2 pd read csv CL train41 csv
  • django设置models.Model数据可以为空

    添加设置 null True blank True 比如 size models CharField max length 255 default null True blank True
  • 华为OD机试 - 分苹果 - 二进制(Java 2023 B卷 100分)

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 核心算法 按照二进制加法计算 并且不计算进位 但是 B希望在满足A的情况下获取苹果重量最多 华为OD机
  • 神州云服务平台(型号:DCC-CRL1000)基本配置教学视频

    教学视频只提供网络搭建与应用技能大赛第二部分基本配置部分视频 仅供大家学习使用 2021年全国职业院校网络搭建及应用第二部分基本配置视频 由于在线播放视频有点模糊 所以给大家提供清晰的教学视频下载链接 神州云服务平台 型号 DCC CRL1
  • 教你如何看懂EMC空间辐射测试报告

    空间辐射测试是最常做的EMC电磁兼容测试项目之一 也是最容易出现问题的一个测试项目 对很多刚接触EMC的朋友来讲 拿到EMC的测试数据 往往感觉比较陌生 不知道怎么看这份数据 相信看完以下内容 你就不会陌生了 专业测试辐射的场所是屏蔽室 主
  • 单片机开发入坑指南

    入坑前了解 什么是单片机 单片机英文名Microcontrollers 即微控制器 英文简称MCU 单片机是一种集成电路芯片 是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU 随机存储器RAM 只读存储器ROM 多种I O口和
  • 第十讲:神州三层交换机配置单区域OSPF路由协议

    关于OSPF 其中的几个基本概念需要了解 OSPF是开放式最短路径优先的缩写 OSPF的协议号是89 OSPF协议中的Router ID是一台路由器的唯一标识 在整个白治系统中唯一 Router ID从路由器的接口lP地址中选择出来 选择的
  • win10从控制台直接进入Anaconda Prompt环境

  • Uboot 编译失败问题

    编译失败问题汇总 索引 一 已经有uboot源码 并且有 build sh 的情况 一 已经有uboot源码 并且有 build sh 的情况 首先Makefile 没有配置编译器 导致的错误 错误提示信息如下 cc1 error bad
  • day27

    1 网络编程 a 软件 客户端 CS架构 client gt server 浏览器 BS架构 browser gt server b 如何实现相互通信 需求一 编写两个软件 软件之间相互通信 需求二 两个人直接连接 网线 需求三 教室相互通
  • 洛谷P1023 税收与补贴问题

    题目描述 你是某家咨询公司的项目经理 现在你已经知道政府对某种商品的预期价格 以及在各种价位上的销售情况 要求你确定政府对此商品是应收税还是补贴的最少金额 也为整数 才能使商家在这样一种政府预期的价格上 获取相对其他价位上的最大总利润 总利
  • Win10+RTX3060配置CUDA等深度学习环境

    Win10 RTX3060机器学习环境配置 1 下载准备 2 下载安装CUDA和CUDNN 2 1 cuda和cudnn下载 2 2 cuda和cudnn安装 3 安装GPU版pytorch与TensorFlow 3 1 下载 3 2 安装
  • synchronized修饰static方法与非static方法的区别

    当synchronized修饰一个static方法时 多线程下 获取的是类锁 即Class本身 注意 不是实例 作用范围是整个静态方法 作用的对象是这个类的所有对象 当synchronized修饰一个非static方法时 多线程下 获取的是
  • iOS第三方支付集成-支付宝支付

    吐槽一下支付宝的文档和demo 文档真是找的我眼花缭乱 demo写的也是看的捉急 没有微信的简单明了 不过全部找到后 静下心来研究 也还是可以的 一 进入官方下Demo 看文档 工欲善其事必先利其器 先看下demo总不是坏处 也可以学习一下
  • 《Spark大数据技术与应用》肖芳 张良均著——课后习题

    目录 教材 知识汇总 课后习题 第一章 Spark概述 Spark的特点 Spark生态圈 Spark应用场景 第二章 Scala基础 匿名函数 Set Map map flatMap groupBy 课后习题 第三章 Spark编程 教材
  • Unity mlagent中强化学习ppo算法的参数怎么设置?

    Unity ML Agents的PPO算法参数可以通过设置ML Agents的Hyperparameter设置来调整 具体有 batch size discount gae lambda learning rate entropy coef
  • 2022尚硅谷阳哥docker篇之Portainer的监控三剑客

    docker compose yml文件 version 3 1 volumes grafana data services influxdb image tutum influxdb 0 9 restart always environm
  • 戴尔,更换固态硬盘后no bootable devices found

    注意 操作之前要备份 备份 备份 更换固态硬盘后 出现no bootable devices found 可以尝试一下这个方法 https www zhihu com question 299594649 answer 1565769605
  • 机器人学:(1)机器人基础

    1 1 机器人机构 机器人的机械机构由一系列刚性构件 连杆 通过链接 关节 联结起来 机械臂的特征在于具有用于保证可移动性的臂 arm 提供灵活性的腕 wrist 和执行机器人所需完成任务的末端执行器 end effector 机器人分为串

随机推荐

  • TS:etcd集群某个etcd实例启动报错(报cluster ID mismatch)-2022.10.13(已解决)

    目录 文章目录 目录 1 报错现象 2 排查过程 3 解决过程 1 尝试办法1 2 尝试办法2 4 总结 引用 关于我 最后 1 报错现象 在k8s高可用集群搭建过程中 关于etcd集群搭建是 报错了 自己当时环境如下 本次复用3个node
  • Java基础题

    面向对象程序设计期末复习之手写代码 Java编程基础 1 定义一个整型的长度为6的一维数组k 6 并将数组中元素k i 值初始化为i 然后 将元素k 3 打印出来 class test1 public static void main St
  • ISIS简介、NSAP与NET地址、Router-Id转换成NET地址

    2 0 0 ISIS简介 NSAP与NET地址 Router Id转换成NET地址 ISIS简介 IS IS Intermediate System to Intermediate System 中间系统到中间系统 1 该协议最初是ISO国
  • 逆向思维:卡通照片真人化

    之前PaddleGAN的趣味应用如雨后春笋般地出现 非常多的项目都是xxx动漫化 当时就有一个很普通的想法为什么大家都会去搞动漫化 这很可能是因为二次元文化的原因 又或者是动漫化的应用 商业价值 就突然蹦出一个想法 为什么没人弄动漫真人化呢
  • free vs delete简洁版

    free释放的是指针指向的内存 回归到操作系统的空闲内存链表中 之后还需要程序员手动将对应的指针赋值成为NULL 不然那个指针还在 并且还指向那个内存 delete是调用的是对应的new 的变量的析构函数 delete对应new delet
  • 出现 Request Entity Too Large问题的解决方法

    根据经验判断应该是上传文件大小被限制了 检查了应用配置是10M 把它设置成100M 重启服务也不能解决问题 原来我们的tomcat是通过nginx发现服务代理的 问题就出现nginx服务器上 原来nginx默认长传文件的大小是1M 可在ng
  • VMware安装系统时“无法创建新虚拟机: 不具备执行此操作的权限“的解决方案

    VMware安装系统时 无法创建新虚拟机 不具备执行此操作的权限 的解决方案 参考文章 1 VMware安装系统时 无法创建新虚拟机 不具备执行此操作的权限 的解决方案 2 https www cnblogs com kailugaji p
  • Python_爬虫复习_爬取直播间弹幕生成词云图

    爬取直播间弹幕 生成词云图 一 环境准备 安装相关第三方库 pip install jieba pip install wordcloud 二 数据准备 爬取对象 2021年5月23号 RNG夺冠直播间的弹幕信息 爬取对象路径 方式1 根据
  • 使用淘宝npm源安装electron7.x.x版本报错的问题

    windows 与 linux 一样 修改用户目录下 npmrc 文件 registry https registry npm taobao org sass binary site https npm taobao org mirrors
  • Unity Animation动画循环播放时卡顿、不连贯问题解决办法

    一 动画卡顿 如上图 可看到 当循环播放动画时 动画像瘸了似的 一会块 一会慢 总之就是不连贯 二 解决办法 打开该元素对应的Animation 然后选中下方的Curves动画曲线 在这里我们可以看到 该动画是一条S型曲线 故而播放速度才会
  • vs2019+pcl1.10.1一劳永逸配置

    不同pcl版本的安装配置有微小差异 低版本要稍微复杂一点 建议选择跟博客一样的配置 防止奇奇怪怪的错误 本次配置是windows vs2019 pcl1 10 1 1 下载pcl1 10 1 Release pcl 1 10 1 Point
  • Nacos Config远程配置读取失败

    项目场景 测试Springboot整合RabbitMQ的时候 使用Nacos做远程配置中心 问题描述 使用Nacos做远程配置中心 在bootstrap yml中已经配置好相关信息如下 spring application name rab
  • C语言三级指针

    C语言 三级指针的应用 http www cnblogs com zhanggaofeng p 5498218 html 三级指针的应用场景 https blog 51cto com wait0804 1874777 三级指针四级存储空间的
  • Android Studio 点击按钮跳转到另一个Activity

    there 一 前言 二 前置工作 2 1创建新的界面和按钮 2 2 绑定按钮 三 intent进行连接并跳转 四 总结 一 前言 最近才开始使用Android Studio 不太熟悉 用博客记录一下 二 前置工作 2 1创建新的界面和按钮
  • python的全局解释锁(GIL)

    一 介绍 全局解释锁 Global Interpreter Lock GIL 是在某些编程语言的解释器中使用的一种机制 在Python中 GIL是为了保证解释器线程安全而引入的 GIL的作用是在解释器的执行过程中 确保同一时间只有一个线程可
  • 集合中常用方法的使用

    集合中常用方法的使用 文章目录 数组和List之间的转化 数组转化为List List转化为数组 包装类型的数据转化 list gt array 注 只能转化到包装类 array gt list 注 只能用包装类转化 数组基本类型和包装类之
  • c++字符型变量和字符串型变量

    include
  • Unity如何实现触摸和鼠标操作的几个问题

    关键点1 在unity中touch事件同时也会触发GetMouseButton事件 有时候可能会给你带来方便 但是如果没有意识到这个问题的话 也很可能给你带来很大的麻烦 关键点2 触摸操作也可以使用Input GetAxis MouseX
  • Vue3 —— 在vue中动态引入组件以及动态引入js的方法

    文章目录 一 动态引入组件 1 具体写法 二 动态引入js文件 1 具体写法 总结 一 动态引入组件 defineAsyncComponent 定义一个异步组件 它在运行时是懒加载的 参数可以是一个异步加载函数 或是对加载行为进行更具体定制
  • Qt5 解析多级JSON 包

    Qt5 中包含了处理 JSON 的类 包含QJsonDocument QJsonArray QJsonObject 这些类在 QCore 模块中 不需要引入其它模块 JSON基本语法规则 JSON 语法是 JavaScript 对象表示语法