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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 下安装Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 启动&#xff1a; python3 -m jupyter lab 2.安装朱皮特 pip3 install -i https://pypi.douban.com/simpl…

高性能的key-value数据库Redis 介绍

Redis 是一个高性能的key-value数据库。 Redis是一个开源的键值存储系统&#xff0c;通常用于缓存和消息传递。它支持多种类型的数据结构&#xff0c;如字符串、列表、集合、散列表和有序集合等。Redis的特点是提供了高性能、灵活性和可伸缩性。 Redis的主要特点包括&#xff…

Pytorch学习 day02(加载数据)

加载数据 * Dataset提供一种方式&#xff1a;来获取数据及其label&#xff0c;给数据进行编号 * Dataloader为神经网络提供不同的数据形式 Dataset的组织形式有很多种&#xff0c;例如&#xff1a; 将label放在文件夹名上&#xff0c;如下&#xff1a; #Dateset # --train #…

Python算法题集_组合总和

Python算法题集_组合总和 题39&#xff1a;组合总和1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【值传递回溯】2) 改进版一【引用传递堆栈回溯】3) 改进版二【过程值列表缓存遍历后检索】 4. 最优算法5. 相关资源 本文为Python算法题集之一的…

.halo勒索病毒的最新威胁:如何恢复您的数据?

尊敬的读者&#xff1a; 随着科技的发展&#xff0c;网络安全已经成为我们日常生活中不可忽视的重要议题。其中&#xff0c;勒索病毒是当前网络安全威胁中的一大挑战&#xff0c;而“.halo”勒索病毒更是近期备受关注的恶意软件之一。本文将介绍关于“.halo”勒索病毒的背景知…

AI新工具(20240227) StickerBaker文本生成贴纸的工具;Mistral Large;Rewind等

StickerBaker - 基于Replicate和Fly.io技术&#xff0c;100%开源的制作贴纸的工具 StickerBaker是一个基于人工智能的贴纸创作工具&#xff0c;允许用户通过输入特定的提示语句生成独特的贴纸。这个工具使用了Replicate平台来生成贴纸&#xff0c;同时依托于Fly.io作为其基础设…

算法项目外包的收费方式

针对算法研究性项目的收费方式和注意事项&#xff0c;这取决于项目的具体性质、规模和所涉及的技术领域。以下是一些常见的收费方式和需要注意的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 收…

Python学习DAY09_文件和异常

文件和异常 实际开发中常常会遇到对数据进行持久化操作的场景&#xff0c;而实现数据持久化最直接简单的方式就是将数据保存到文件中。 在 Python 中实现文件的读写操作其实非常简单&#xff0c;通过 Python 内置的 open 函数&#xff0c;我们可以指定文件名、操作模式、编码信…

1552.平衡二叉树

输入格式 第一行包含整数 N&#xff0c;表示总插入值数量。第二行包含 N 个不同的整数&#xff0c;表示每个插入值。 输出格式 输出得到的 AVL 树的根是多少。 数据范围 1≤N≤20 输入样例1&#xff1a; 5 88 70 61 96 120 输出样例1&#xff1a; 70 输入样例2&#xff1a…

商业江湖大揭秘:月入千万与颗粒无收,究竟差了什么?

在商业的浩瀚江湖 英雄豪杰们或乘风破浪、月入千万&#xff0c;或步履蹒跚、颗粒无收&#xff0c;这背后的奥秘究竟何在&#xff1f;是天意难测&#xff0c;还是人为疏忽&#xff1f;是制度的不完善&#xff0c;还是工具的滞后不前&#xff1f;答案就隐藏在你未曾注意的细节之…

公司招嵌入式开发岗位,为什么感觉一年比一年难?

最近看到一个问题&#xff1a; 是一个HR在吐槽招不到嵌入式开发的人才。 这句话&#xff0c;难免会误导一些想入行嵌入式的同学&#xff0c;卧槽&#xff0c;这么缺人?赶紧冲&#xff01; 哼次哼次学完一堆技术栈&#xff0c;一投简历&#xff0c;一个面试机会都没有。 这就是…

24路电磁锁主板在智能存储系统中的作用

在无人值守场景中&#xff0c;如自助服务机、智能生鲜柜、共享储物柜等&#xff0c;使用24路电磁锁主板可以集成身份识别技术&#xff0c;将用户的验证结果转化为相应的开锁动作&#xff0c;提升用户体验和运营效率&#xff0c;是实现智能存储系统高效、安全和自动化运行的关键…

Kubernetes的五大开源存储项目

在Kubernetes中&#xff0c;关于数据的持久化管理是一种挑战&#xff0c;对此&#xff0c;社区提供了多种存储的解决方案&#xff0c;这些方案旨在简化和优化容器化应用程序的持久化数据管理。 现介绍 Kubernetes 的五大开源存储项目&#xff0c;带你了解开源存储解决方案的多…

unity后期

unity|后处理篇 前言一、Post-Processing 1、 Post-Processing的使用2、Post-Processing后处理效果 抗锯齿①、Ambient Occlusion 环境光遮蔽②、Auto Exposure 自动曝光③、Bloom 辉光/泛光④、Chromatic Aberration | 色差⑤、Color Grading 色调/颜色分级⑥、Depth Of Fiel…

锐捷网络携数据中心、以太全光等创新解决方案亮相2024MWC

在西班牙巴塞罗那举行的2024年世界移动通信大会(MWC)上,锐捷网络(下文简称“锐捷”)展示了将技术与应用充分融合的云数据中心、5G、光网络等产品及解决方案,帮助更多行业组织建设更贴近业务、智能、简单、高效、绿色低碳的网络基础设施,应对当下及未来的挑战,共同连接更广阔可能…

PHP语言常见面试题:请解释一下PHP是什么,以及它的主要用途是什么?

PHP&#xff0c;英文全称为Hypertext Preprocessor&#xff0c;中文名称为“超文本预处理器”。它是一种通用的开源脚本语言&#xff0c;特别适用于Web开发领域。PHP最初是由Rasmus Lerdorf在1995年创建的&#xff0c;并且自那时以来&#xff0c;它已经发展成为一个功能强大且易…

骨传导耳机好用吗?六大选购法则与避坑技巧大公开

在过去的两年里&#xff0c;骨传导耳机逐渐成为大众的新宠&#xff0c;这一趋势并不出人意料。毕竟长时间使用音量过大的传统入耳式耳机&#xff0c;多多少少会对我们的听力健康构成威胁。然而不同耳机对听力的潜在影响程度是有差异的。骨传导耳机好用吗&#xff1f;与传统耳机…

租床小程序|租床系统|租赁软件开发功能

随着移动互联网的普及&#xff0c;越来越多的人开始选择在线上完成各种租赁业务&#xff0c;而医院租床也不例外。在这个趋势下&#xff0c;开发一款租赁小程序成为了市场的必然需求。 租床小程序的功能 1、搜索与筛选 为了满足不同用户的需求&#xff0c;小程序应该提供设备…

android适配器adapter,Android程序员架构之路该如何继续学习

便于开发的插件、工具和第三方开源库 1.GsonFormat 使用方法&#xff1a;快捷键AltS也可以使用AltInsert选择GsonFormat&#xff0c;作用&#xff1a;速将json字符串转换成一个Java Bean&#xff0c;免去我们根据json字符串手写对应Java Bean的过程。 2.ButterKnife Zelezny …

vmware16 nat模式 经常掉线 需要重启nat

vmware16 nat模式 经常掉线 需要重启nat才能联网&#xff0c;之后又过一会掉线&#xff0c;往复操作重启nat. 修复方案&#xff08;待验证&#xff09; 修改静态ip 尝试过的方案&#xff08;无效果&#xff09; 一 调整 MaxUserPort 和 TcpTimedWaitDelay 设置 连接&#xf…