往期回顾
【QT进阶】Qt http编程之后端API测试工具postman使用介绍-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解析的简单介绍
都看到这里了,点个赞再走呗朋友~
加油吧,预祝大家变得更强!