【QT进阶】Qt http编程之json解析的简单介绍

往期回顾

【QT进阶】Qt http编程之后端API测试工具postman使用介绍-CSDN博客

【QT进阶】Qt http编程之http相关类的简单介绍-CSDN博客

【QT进阶】Qt http编程之用户登录注册功能实现-CSDN博客

【QT进阶】Qt http编程之json解析的简单介绍 

一、JSON字符串

1、基本概念

JSON字符串是一种用于表示数据的格式化字符串,通常用于数据交换和存储。JSON字符串由一系列Unicode字符组成,按照特定的规则进行组织和排列,以便在不同的系统之间进行数据交换和传输。

2、 基本结构

JSON字符串的基本结构包括对象和数组两种类型。

2.1对象

对象由一对花括号{}包围,内部包含一系列键值对,键和值之间使用冒号分隔,不同键值对之间使用逗号分隔。例如:

{"name": "Alice","age": 30,"city": "New York"
}
2.2数组

 数组由一对方括号[]包围,内部包含一系列值,不同值之间使用逗号分隔。例如:

[1, 2, 3, 4, 5]

JSON字符串可以嵌套使用,即对象中可以包含数组,数组中也可以包含对象,以此类推。JSON字符串中的值可以是字符串、数字、布尔值、对象、数组等不同类型的数据。

JSON字符串具有易读性和易解析性的特点,因为其结构清晰简洁,可以轻松地被计算机程序解析和生成。在Web开发、移动应用开发等领域,JSON字符串被广泛应用于数据交换和通信中。 

二、Qt解析json字符串格式

在QT中,可以使用QJsonDocument类来解析JSON数据。而且Qt解析json字符串的方法,其实大多是都是一个套路。

1、示例代码

大家可以看看代码,注释写的还是很详细的

#include "ch65_qtjson.h"
#include <string>
#include <QJsonDocument> 
#include <QJsonObject>
#include <QDebug>using namespace std;ch65_qtjson::ch65_qtjson(QWidget *parent): QWidget(parent)
{ui.setupUi(this);//用C++的R字符串来写,可以保持原有格式string json_str = R"({"date": "20220701","level": 1,"msg": "register account","status": "success","username": "jackli"})";//这样其实数据也不是空的,因为”{}“也算数据//string json_str = R"({})";//转为QString类型QString qstr = QString::fromStdString(json_str);//判空if (qstr.isEmpty()){qDebug() << "qstr is empty";return;}//把字符串转为QByteArray,下面的函数参数是QByteArray类型QByteArray jbyte = qstr.toLocal8Bit();//定义一个错误,因为fromJson方法里需要一个错误信息QJsonParseError error;//从 QByteArray 类型的 jbyte 中解析 JSON 数据,并将解析结果存储在 jdoc 中。//如果在解析过程中出现错误,错误信息将存储在 QJsonParseError 类型的变量 error 中。QJsonDocument jdoc = QJsonDocument::fromJson(jbyte, &error);//判断是否有错if (error.error != QJsonParseError::NoError){// 有错误qDebug() << "json parse error";return;}qDebug() << "json parse success";//判断是否为空if (jdoc.isNull() || jdoc.isEmpty()){qDebug() << "json docment is empty";return;}//从先前解析的 QJsonDocument 对象 jdoc 中获取 QJsonObject//从该对象中获取名为 "date" 的字段,并将其值转换为字符串类型存储在 date 变量中QJsonObject jobj = jdoc.object();QString date = jobj["date"].toString();qDebug() << "date" << date;int level = jobj["level"].toInt();qDebug() << "level" << level;
}ch65_qtjson::~ch65_qtjson()
{}

2、注意事项

2.1、C++R字符串

用C++的R字符串来解析,本来是什么格式,他会保持原来的格式,而且写错了也会提示

    string json_str = R"({"date": "20220701","level": 1,"msg": "register account","status": "success","username": "jackli"})";
2.2、添加头文件和命名空间 

注意用了C++的string,要添加头文件和命名空间

#include <string>using namespace std;

这里的解析和前面的对应着,完善起来以后就是,获取前端返回的用户json格式数据,解析后进行逻辑验证,最后返回结果,比如:登陆界面 。


以上就是如何在Qt中进行json解析的简单介绍

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

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

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

相关文章

电脑便签怎么固定位置 能固定在桌面的电脑便签

在繁忙的工作中&#xff0c;电脑便签是我离不开的小助手。每当灵感闪现&#xff0c;或是需要记录待办事项时&#xff0c;我总会打开便签&#xff0c;快速地记录下来。它就像我电脑屏幕上的一块“记事板”&#xff0c;随时提醒我未完成的工作和即将到来的任务。 但有一段时间&a…

i管家空间不足提醒怎么关闭

i管家的空间不足提醒是为了提醒用户手机存储空间不足&#xff0c;可能会影响手机的正常运行。目前&#xff0c;这个提醒功能是无法直接关闭的。如果您希望减少这类提醒的出现&#xff0c;可以尝试以下几种方法&#xff1a; 清理手机存储&#xff1a;检查手机中是否有不需要的文…

Unity3D 多人战场Animation优化详解

在Unity3D中&#xff0c;实现多人战场动画优化是一个非常重要的任务。动画在游戏中扮演着非常重要的角色&#xff0c;它能够让游戏更加生动和真实。然而&#xff0c;在多人战场中&#xff0c;同时播放多个角色的动画会给游戏性能带来很大的压力。因此&#xff0c;我们需要采取一…

JavaWeb--JS正则表达式

目录 1. 简介 1.1. 语法 1.1.1. 使用RegExp构造函数创建正则表达式 1.1.2. 使用正则表达式字面量语法创建正则表达式 1.1.3. 正则表达式的应用 2. 修饰符 3. 方括号 4. 元字符 5. 量词 6. RegExp对象方法 7. 支持正则的String的方法 8. 正则表达式体验 8.1. 验证 …

restful请求风格的增删改查-----查询and添加

一、restful风格的介绍 restful也称之为REST ( Representational State Transfer )&#xff0c;可以将它理解为一种软件架构风格或设计风格&#xff0c;而不是一个标准。简单来说&#xff0c;restful风格就是把请求参数变成请求路径的一种风格。例如&#xff0c;传统的URL请求…

rk3568死机调试

结论 有两种死机: 一种是有异常栈,此种情况应该是由于linux的实时补丁导致的,去掉实时补丁后未复现;一种无异常栈,但是打印mmc异常:mmc0: cache flush error -110,此种情况需要加打印继续定位。无异常栈死机 无异常栈死机是由于MMC初始化失败导致,根本原因是系统启动…

iOS原生与H5交互方法

UIWebView Objective-C 调用 JavaScript 在使用UIWebView时&#xff0c;可以使用stringByEvaluatingJavaScriptFromString:方法来执行JavaScript代码。 示例代码&#xff1a; NSString *result [webView stringByEvaluatingJavaScriptFromString:"returnFunction()&q…

Kubesphere使用教程

一、简介 KubeSphere是一个开源的容器平台&#xff0c;它提供了Kubernetes集群的部署、运维和管理能力&#xff0c;并且具有友好的Web UI界面&#xff0c;降低了Kubernetes的使用门槛。本教程将引导你逐步了解KubeSphere的基本使用。 二、环境准备 准备至少三台服务器或虚拟…

Darknet,看过很多篇,这个最清晰了

Darknet深度学习框架&#xff1a;YOLO背后的强大支持 Darknet&#xff0c;一个由Joseph Redmon开发的轻量级神经网络框架&#xff0c;以其在计算机视觉任务&#xff0c;特别是目标检测中的卓越表现而闻名。本文将详细介绍Darknet的基本概念、结构以及它在深度学习领域的应用。…

UE4_动画基础_根运动Root Motion

学习笔记&#xff0c;仅供参考&#xff01; 在游戏动画中&#xff0c;角色的碰撞胶囊体&#xff08;或其他形状&#xff09;通常由控制器驱动通过场景。然后来自该胶囊体的数据用于驱动动画。例如&#xff0c;如果胶囊体在向前移动&#xff0c;系统就会知道在角色上播放一个跑步…

Kivy Pyinstaller Windows 打包

各种报错 ImportErrorWhenRunningHook: Failed to import module __PyInstaller_hooks_0_kivy required by hook for module 三天美好时光啥也没干&#xff0c;就研究这个了。 打包成功&#xff0c;运行应用程序exe闪退的。终于打包成功了。 这所有的原因都是因为我爱你。如果…

请编写一个函数int fun(int*s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法和详细的解析。 题干 请编写一个函…

小型架构实验模拟

一 实验需求 二 实验环境 22 机器&#xff1a; 做nginx 反向代理 做静态资源服务器 装 nginx keepalived filebeat 44机器&#xff1a; 做22 机器的备胎 装nginx keepalived 99机器&#xff1a;做mysql的主 装mysqld 装node 装filebeat 77机器&#xff1a;做mysq…

pytorch 今日小知识2——F.avg_pool2d、clamp

今天看到 def gem(self, ipts):return F.avg_pool2d(ipts.clamp(minself.eps).pow(self.p), (1, ipts.size(-1))).pow(1. / self.p) 这个函数中的F.avg_pool2d 不是很理解就查了一下 ipts.clamp(1.0e-6): 这个操作将ipts中的每个元素限制在[1.0e-6, inf)的范围内。也就是说&a…

【Python】——字典

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【python】一文读懂python函数

【python】一文读懂python函数 文章目录 【python】一文读懂python函数(一)简单入门理解函数(二)函数的基本结构:(三)函数的默认值(四)可变参数(五)基于字典的可变参数(**可变参数)(六)函数中变量的作用域(七)lambda函数(八) 过滤函数filter()在Python中,…

谷歌Gemini 1.5 Pro国内怎么用?国内镜像来了

长期以来&#xff0c;许多人向我咨询是否存在一个稳定而高效的全球AI大模型测试平台&#xff0c;这个平台需要不仅真实可靠&#xff0c;而且能够提供稳定和快速的服务&#xff0c;不会频繁出现故障或响应缓慢的问题。然而&#xff0c;当我发现了AskManyAI时&#xff0c;我被其所…

蛋白质治病突变的计算方法(三)

3 用于识别致病突变的特征 文献中使用了几种特征来识别蛋白质中的致病突变。它们大致分为三类&#xff1a;(1)序列&#xff0c;(2)结构和(3)网络&#xff0c;以及它们的组合。图1说明了这三组中的一些重要属性。 图1 用于识别致病突变和热点的重要特征。 基于氨基酸序列的特性…

go下载依赖时超时timeout

go下载依赖时超时timeout go: module k8s.io/component-base/logs: Get “https://proxy.golang.org/k8s.io/component-base/logs/v/list”: dial tcp 172.217.160.113:443: i/o timeout 解决办法如下&#xff0c;运行命令&#xff1a; go env -w GO111MODULEon go env -w GO…

李宏毅2022机器学习/深度学习 个人笔记(3)

本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点 本篇记录代码效果不佳时应该怎么做 如下图所示&#xff1a; 接下来探讨&#xff0c;当optimization不佳的时候&#xff0c;如何判断是遇到了鞍点还是遇到了局部最小值点&#xff1f;可以通过多元函数的泰勒…