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

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

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

相关推荐
1uther40 分钟前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎
C_Liu_1 小时前
C++:类和对象(下)
开发语言·c++
coderxiaohan1 小时前
【C++】类和对象1
java·开发语言·c++
阿幸软件杂货间2 小时前
Office转PDF转换器v1.0.py
开发语言·pdf·c#
扯淡的闲人2 小时前
多语言编码Agent解决方案(5)-IntelliJ插件实现
开发语言·python
丑小鸭是白天鹅2 小时前
Kotlin协程详细笔记之切线程和挂起函数
开发语言·笔记·kotlin
sali-tec2 小时前
C# 基于halcon的视觉工作流-章34-环状测量
开发语言·图像处理·算法·计算机视觉·c#
java搬砖工-苤-初心不变2 小时前
基于 lua_shared_dict 的本地内存限流实现
开发语言·junit·lua
charlie1145141912 小时前
Kotlin 的 apply / with / run 详解
开发语言·kotlin·程序设计·面对对象
Tiger_shl3 小时前
【层面一】C#语言基础和核心语法-02(反射/委托/事件)
开发语言·c#