当前位置: 首页 > news >正文

Qt 中Json的构造和解析简单例子

概述: Qt中使用Json比较方便,不像纯C++需要导入CJson RapidJson JsonCpp等第三方的库,主要使用到QJsonDocument、QJsonObject对象即可

1、如何构造一个json字符串

        假如我们需要构造 {"cmd":"1001","data":{"content":"05:00","type":1}} 这样的json串,在Qt中应该这样编写代码

main.cpp

#include <QApplication>
#include <QWidget>
#include <QDebug>//cc-tools里面生成的动态库
#include "CcJsonTool.h"int main(int argc, char *argv[])
{auto cmd = 1001;auto type = 1;auto content = "05:00";QVariantMap contentMap;contentMap["cmd"] = QString::number(cmd);QVariantMap dataMap;dataMap["type"] = type;dataMap["content"] = content;contentMap["data"] = dataMap;//使用工具构建CcJsonTool jsonTool;auto str = jsonTool.toJsonFromVariantMap(contentMap);qDebug() << "jsonStr:" << str;}

CcJsonTool.h

#pragma once#include "cc_tools_global_config.h"#include <QString>
#include <QObject>
#include <QVariantMap>class CCTOOLS_EXPORT CcJsonTool : public QObject
{Q_OBJECT
public:CcJsonTool(QObject* parent = nullptr);~CcJsonTool();QString toJsonFromVariantMap(QVariantMap dataMap);bool ParseJsonFromString(const QString& jsonData);
};

CcJsonTool.cpp

#include "CcJsonTool.h"#include <QJsonDocument>
#include <QJsonObject>CcJsonTool::CcJsonTool(QObject* parent)
:QObject(parent)
{}CcJsonTool::~CcJsonTool()
{}QString CcJsonTool::toJsonFromVariantMap(QVariantMap dataMap)
{// dataMap: {"cmd":"1001","data":{"content":"05:00","type":1}}QByteArray command = QJsonDocument(QJsonObject::fromVariantMap(dataMap)).toJson(QJsonDocument::Compact);return QString::fromUtf8(command);
}bool CcJsonTool::parseJsonFromString(const QString& jsonData)
{// jsonData: {"cmd":"1001","data":{"content":"05:00","type":1}}QJsonParseError error;auto jsonDoc = QJsonDocument::fromJson(jsonData.toUtf8(), &error);if (error.error != QJsonParseError::NoError){return false;}auto mapContent = jsonDoc.object().toVariantMap();if (!mapContent.contains("cmd") || !mapContent.contains("data")){return false;}auto mapData = mapContent["data"].toMap();if (!mapData.contains("content")){return false;}auto cmd = mapContent["cmd"].toString().toUInt();if (cmd == 1001){auto type = mapData["type"].toInt();auto content = mapData["content"];}return true;
}

2、解析一个Json字符串

main.cpp

#include <QApplication>
#include <QWidget>
#include <QDebug>//cc-tools里面生成的动态库
#include "CcJsonTool.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);//jsonStrauto JsonStr = "{\"cmd\":\"1001\",\"data\":{\"content\":\"05:00\",\"type\":1}}";if (jsonTool.parseJsonFromString(JsonStr)){qDebug() << "parse json str success";}else{qDebug() << "parse json str failed";}return app.exec();
}

3、参考gitee仓库上的测试源码

CcQtApp: Qt测试demo

相关文章:

Qt 中Json的构造和解析简单例子

概述: Qt中使用Json比较方便&#xff0c;不像纯C需要导入CJson RapidJson JsonCpp等第三方的库&#xff0c;主要使用到QJsonDocument、QJsonObject对象即可 1、如何构造一个json字符串 假如我们需要构造 {"cmd":"1001","data":{"content&q…...

CSS特性

小技巧&#xff1a;在调试工具中&#xff0c;css样式上看层叠&#xff0c;下看继承。 1、层叠性 相同的属性会被覆盖&#xff0c;不同的属性会叠加 2、继承性 3、优先级 基于不同种类的选择器的匹配规则。 通配符 < 标签 < 类选择器 < id选择器 < 行内样式 <…...

springcloud:3.1介绍雪崩和Resilience4j

灾难性雪崩效应 简介 服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 原因 1.服务提供者不可用(硬件故障、程序bug、缓存击穿、用户大量请求) 2.重试加大流量(用户重试,代码逻辑重试) 3.服…...

实现定时器的两种方法:使用windows api定时器 和使用c++11/14 定时器

前言&#xff1a; 当我有一个开发需求&#xff0c;符合下面的条件 1.需要某个任务在程序中每隔一段时间就要执行一次&#xff0c;可能把这个任务封装成了一个函数。 2.这种需要定时执行的任务&#xff0c;有2个&#xff0c;3个....越来越多。 这个时候我们就可以考虑使用定时…...

H5:图像标签和路径

目录 一.前言 二.正文 1.图像标签 注意: 2.路径 Ⅰ.目录文件夹和根目录 Ⅱ.路径 三.结语 一.前言 本篇介绍有关标签和路径&#xff0c;关于图像标签我们来看看有什么需要注意的。 二.正文 1.图像标签 在HTML标签中&#xff0c;img标签用于定义HTML页面中的图像。 <im…...

AI学习(5):PyTorch-核心模块(Autograd):自动求导

1.介绍 在深度学习中&#xff0c;自动求导是一项核心技术&#xff0c;它使得我们能够方便地计算梯度并优化模型参数。PyTorch 提供了一个强大的自动求导模块(Autograd)&#xff0c;它可以自动计算张量的导数得出梯度信息&#xff0c;同时也支持高阶导数计算。 1.1 概念词 在学…...

Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读

Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读 摘要简介方法3.1 Normal Representation3.2 Feature Refinement3.3 Training and Inference 4 实验结果5 总结 文章信息&#xff1a; 原文链接&#xff1a;https://arxiv.org/abs/2402.18293 源码…...

FaceBook获取广告数据

1、访问 广告管理工具 确认自己登陆的账号下面能看到户。 ​ 2、使用 图谱Api探索工具 生成用户短期口令 ​ 3、get请求(或者浏览器直接打开)访问&#xff1a; https://graph.facebook.com/v19.0/me?fieldsid,name, email&access_token{上一步生成的口令} ​ 4、短期…...

Redis之十:Spring Data Redis --- CrudRepository方式

SpringData Redis CrudRepository方式 Spring Data Redis 的 CrudRepository 是 Spring Data 框架中用于提供基础 CRUD&#xff08;创建、读取、更新和删除&#xff09;操作的一个接口。在与 Redis 集成时&#xff0c;尽管 Redis 是一个键值存储系统&#xff0c;并没有像关系型…...

Spring重点记录

文章目录 1.Spring的组成2.Spring优点3.IOC理论推导4.IOC本质5.IOC实现&#xff1a;xml或者注解或者自动装配&#xff08;零配置&#xff09;。6.hellospring6.1beans.xml的结构为&#xff1a;6.2.Spring容器6.3对象的创建和控制反转 7.IOC创建对象方式7.1以有参构造的方式创建…...

代码覆盖率工具Gcovr和Fastcov的性能对比

在软件开发过程中&#xff0c;代码覆盖率工具是非常重要的&#xff0c;它可以帮助开发人员评估他们的代码覆盖情况&#xff0c;从而更好地进行测试和调试。在这方面&#xff0c;Gcovr和fastcov是两个常用的工具。本文将对这两种工具的性能进行对比分析。 首先&#xff0c;让我…...

css - flex布局实现div横向滚动

父盒子&#xff1a; display: flex; //将容器设置为Flex布局。overflow-x: scroll; //设置容器水平方向出现滚动条。white-space: nowrap; //防止项目换行显示。 子盒子&#xff1a; flex: 0 0 auto; //设置项目为固定宽度。width: 200px; //设置项目的宽度。margin-rig…...

关于在Ubuntu20.04环境下安装GRPC

关于在Ubuntu20.04环境下安装GRPC 1 cmake安装 要在Ubuntu 20.04上安装CMake 3.26.4,请按照以下步骤进行操作: 打开终端并更新apt软件包列表: sudo apt update安装必要的依赖项: sudo apt install -y wget gcc g++ build-essential下载CMake 3.26.4的源代码: wget https…...

力扣601 体育馆的人流量

在解决"连续三天及以上人流量超过100的记录"问题时&#xff0c;MySQL方案作为力扣解决问题的方案通过窗口函数和分组技巧高效地识别连续记录。而Python与Pandas方案作为扩展则展示了在数据处理和分析方面的灵活性&#xff0c;通过行号变换和分组计数来筛选符合条件的…...

ubuntu20.04设置docker容器开机自启动

ubuntu20.04设置docker容器开机自启动 1 docker自动启动2 容器设置自动启动3 容器自启动失败处理 1 docker自动启动 &#xff08;1&#xff09;查看已启动的服务 $ sudo systemctl list-units --typeservice此命令会列出所有当前加载的服务单元。默认情况下&#xff0c;此命令…...

Kubernetes/k8s的核心概念

一、什么是 Kubernetes Kubernetes&#xff0c;从官方网站上可以看到&#xff0c;它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语&#xff0c;它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词&#xff0c;也就是“k8s”&#xff…...

vue 前端预览 Excel 表

一、安装依赖包官网 npm i luckyexceltemplate 模板 <!-- 用于渲染表格的容器 --> <div id"luckysheet" stylewidth:100vw;height:100vh></div>二、加载 异步加载及 import LuckyExcel from luckyexcel;/* 下列代码加载 cdn 文件&#xff0c;你…...

【JS】生成N位随机数

作用 用于邮箱验证码 码 ramNum.js /*** 生成N位随机数字* param {Number} l 默认&#xff1a;6&#xff0c;默认生成6位随机数字* returns 返回N位随机数字*/ const ramNum (l 6) > {let num for (let i 0; i < l; i) {const n Math.random()const str String(n…...

2024年FPGA可以进吗

2024年&#xff0c;IC设计FPGA行业仍有可能是一个极具吸引力和活力的行业&#xff0c;主要原因包括&#xff1a; 1. 技术发展趋势&#xff1a;随着5G、人工智能、物联网、自动驾驶、云计算等高新技术的快速发展和广泛应用&#xff0c;对集成电路尤其是高性能、低功耗、定制化芯…...

小程序图形:echarts-weixin 入门使用

去官网下载整个项目&#xff1a; https://github.com/ecomfe/echarts-for-weixin 拷贝ec-canvs文件夹到小程序里面 index.js里面的写法 import * as echarts from "../../components/ec-canvas/echarts" const app getApp(); function initChart(canvas, width, h…...

RGBLEDBlender:嵌入式RGB LED色彩混合与动态控制库

1. RGBLEDBlender 库深度解析&#xff1a;面向嵌入式系统的RGB色彩混合与动态控制方案1.1 库定位与工程价值RGBLEDBlender 是一个轻量级、面向实时性要求的RGB LED色彩混合控制库&#xff0c;专为资源受限的微控制器平台&#xff08;如Arduino系列、STM32F0/F1等Cortex-M0/M3内…...

3步打造纯净Windows 11:用Win11Debloat告别系统臃肿

3步打造纯净Windows 11&#xff1a;用Win11Debloat告别系统臃肿 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cust…...

打字不如说话,说话不如截图——AI 代码助手的多模态输入实践澜

整体排查思路 我们的目标是验证以下三个环节是否正常&#xff1a; 登录成功时&#xff1a;服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端&#xff1a;浏览器是否成功接收并存储了该Cookie。 后续请求&#xff1a;浏览器在执行查询等操作…...

深入解析AXI VDMA:视频流高效传输的关键技术

1. AXI VDMA&#xff1a;视频处理的"高速公路收费站" 想象一下早晚高峰的城市环线&#xff0c;成千上万辆汽车需要有序通过收费站。AXI VDMA&#xff08;Video Direct Memory Access&#xff09;在视频处理系统中扮演的角色&#xff0c;就像这个智能收费站系统——它…...

从CTF靶场到实战:手把手教你用Fenjing和SSTImap自动化检测Jinja2模板注入漏洞

从CTF靶场到实战&#xff1a;手把手教你用Fenjing和SSTImap自动化检测Jinja2模板注入漏洞 在渗透测试和CTF竞赛中&#xff0c;模板注入漏洞&#xff08;SSTI&#xff09;正成为越来越常见的攻击面。特别是使用Jinja2模板引擎的Web应用&#xff0c;由于开发人员对用户输入过滤不…...

代码之外周刊(第期):当技术让一切趋同,我们还剩什么?儇

1. 前言 本文详细介绍如何使用 kylin v10 iso 文件构建出 docker image&#xff0c;docker 版本为 20.10.7。 2. 构建 yum 离线源 2.1. 挂载 ISO 文件 mount Kylin-Server-V10-GFB-Release-030-ARM64.iso /media 2.2. 添加离线 repo 文件 在/etc/yum.repos.d/下创建kylin…...

【QML】自定义模块的创建与单例模式实践指南

1. 为什么需要自定义QML模块&#xff1f; 在QtQuick应用开发中&#xff0c;随着项目规模扩大&#xff0c;把所有QML文件堆在一起会变得难以维护。想象一下你家的工具箱——如果所有工具都散落在抽屉里&#xff0c;找起来肯定费劲。而自定义模块就像给工具分门别类&#xff1a;螺…...

西门子S7-200SMART与三菱变频器通讯程序:Modbus RTU协议下的高效控制解决方案

西门子S7-200SMART与三菱变频器通讯程序&#xff0c;实际效果如视频所示&#xff0c;认准店名未来电气&#xff0c;支持。 只是程序&#xff0c;不发快递物流&#xff0c;采用modbus rtu协议。 型号:plc西门子200smart&#xff0c;威纶通MT8071IE&#xff0c;变频器FR-E700(FR-…...

从汽车诊断到机器人:手把手教你用Wireshark抓包分析SocketCAN数据

从汽车诊断到机器人&#xff1a;用Wireshark解密SocketCAN的高级逆向工程 当面对CAN总线上汹涌而来的十六进制数据流时&#xff0c;大多数工程师的第一反应是打开candump工具。但很快&#xff0c;屏幕上滚动如瀑布般的原始帧会让任何人感到窒息——就像试图用吸管喝干消防水龙带…...

Sollumz:在Blender中打造专业级GTA V游戏资产的终极指南 [特殊字符]

Sollumz&#xff1a;在Blender中打造专业级GTA V游戏资产的终极指南 &#x1f3ae; 【免费下载链接】Sollumz Grand Theft Auto V modding suite for Blender. This add-on allows the creation of modded game assets: 3D models, maps, interiors, animations, etc. 项目地…...