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

embedded/2024/9/23 10:16:48/

往期回顾

【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.ppmy.cn/embedded/21934.html

相关文章

ASP.NET基于WEB的选课系统

摘要 设计本系统的目的是对选课信息进行管理。学生选课系统维护模块主要完成的是系统管理与维护功能。课题研究过程中&#xff0c;首先对系统管理模块进行了详尽的需求分析&#xff0c;经分析得到系统管理模块主要完成如下的功能&#xff1a;用户基本信息、选课信息的录入,查看…

智能合约语言(eDSL)—— 并行化方案

到目前为止&#xff0c;一个简单的合约语言与合约虚拟机已经完成了&#xff1b;接下来&#xff0c;我们让我们的整个系统可以并行化&#xff1b; 为什么要并行&#xff1f; 性能&#xff0c;如果我们用现在的互联网应用去衡量dapp&#xff0c;dapp无法支撑这种量级的访问&…

【总结】hbase master重启恢复失败问题修复

问题现象 最近hbase master 莫名其妙宕机了&#xff0c;查看最后输出日志&#xff0c;也没有发现有效信息。 于是想着先重启一把&#xff0c;在hbase master 选主成active状态的过程中&#xff0c;发现重启多次都很漫长&#xff0c;且最终因重启时间过长&#xff0c;被hbase-…

比亚迪唐EV和唐DM-p荣耀版上市,成为新能源汽车市场中的佼佼者!

随着环保理念的深入人心&#xff0c;新能源汽车市场正迎来前所未有的发展机遇。在这个变革的浪潮中&#xff0c;唐EV和唐DM-p荣耀版的上市无疑为市场注入了新的活力。它们凭借先进的技术、卓越的性能以及豪华配置&#xff0c;成为了新能源汽车市场中的佼佼者。然而&#xff0c;…

黑马点评(五) -- 分布式锁-redission

1 . 分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如HashTable这样的代码中&#xff0c;他的方法都…

《QT实用小工具·四十一》无边框窗口

1、概述 源码放在文章末尾 该项目实现了无边框窗口效果&#xff0c;项目demo如下所示&#xff1a; 项目代码如下所示&#xff1a; #include "framelesswindow.h" #include <QGuiApplication> #include <QScreen>#ifdef Q_OS_WIN #include <window…

CodeInWord 首尾行缩进问题

问题 CodeInWord 首尾行缩进问题 详细问题 笔者使用CodeInWord将代码内容在Word中展示。 但是首尾行缩进存在问题。 解决方案 新建一个Word文档&#xff0c;将内容先粘贴至新建的Word文档中。再将新建的Word文档中的内容复制至目标Word文档中。 问题产生原因 当使用Co…

个人学习总结__打开摄像头、播放网络视频的以及ffmpeg推流

前言 最近入手了一款非常便宜的usb摄像头&#xff08;买回来感觉画质很低&#xff0c;没有描述的4k&#xff0c;不过也够用于学习了&#xff09;,想着利用它来开启流媒体相关技术的学习。第一步便是打开摄像头&#xff0c;从而才能够对它进行一系列后续操作&#xff0c;诸如实…