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

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

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

相关推荐
这周也會开心11 分钟前
Java-多态
java·开发语言
Forward♞13 分钟前
Qt——网络通信(UDP/TCP/HTTP)
开发语言·c++·qt
XH华14 分钟前
C语言第十三章自定义类型:联合和枚举
c语言·开发语言
2401_8582861137 分钟前
OS26.【Linux】进程程序替换(下)
linux·运维·服务器·开发语言·算法·exec·进程
草莓熊Lotso42 分钟前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day13
c语言·开发语言·刷题·强化训练
一尘之中2 小时前
在Python 2.7中安装SQLAlchemy的完整指南
开发语言·python·ai写作
黄贵根2 小时前
使用JDK11标准 实现 图数据结构的增删查改遍历 可视化程序
java·开发语言·数据结构
电商数据girl2 小时前
Python 爬虫获得淘宝商品详情 数据【淘宝商品API】
大数据·开发语言·人工智能·爬虫·python·json·php
盒马盒马2 小时前
Rust:变量、常量与数据类型
开发语言·rust
傻啦嘿哟2 小时前
Rust爬虫实战:用reqwest+select打造高效网页抓取工具
开发语言·爬虫·rust