【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解析的简单介绍

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

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

相关推荐
FRing037 分钟前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
云深麋鹿10 分钟前
C++ | 基于红黑树实现mymap与myset
开发语言·c++
weixin_417396831 小时前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电
某不知名網友2 小时前
ROS2进阶:服务通信、自定义SRV接口、参数服务器与基于服务的参数通信详解
java·开发语言·microsoft
java_nnnn2 小时前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
qetfw2 小时前
Bash 字符串处理:参数展开、序列与脚本执行方式
linux·开发语言·chrome·bash
小羊没烦恼!2 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
学Linux的语莫2 小时前
python中类的常见写法
开发语言·python·状态模式
需要8262 小时前
容器化 Java:镜像瘦身与 JVM 容器感知(cgroup)
java·开发语言·jvm
dyxal3 小时前
A2A 协议 v1.0 完全指南:方法名、Agent Card、三种绑定与 FastAPI 实战
开发语言·qt·fastapi