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

news/2024/9/23 6:39:01/

往期回顾

【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/news/1431115.html

相关文章

【Node.js】json-server

概述 json-server 主要用于快速开启一个后端服务&#xff0c;并手动设置模拟接口数据。 以下来源于 json-server - npm (npmjs.com) 安装 npm install json-server用法 创建文件db.json {"posts": [{ "id": "1", "title": "a…

Altair® (澳汰尔)Grid Engine® 分布式资源管理系统

Grid Engine 是可靠的分布式资源管理系统&#xff0c;用于优化数千个数据中心的工作负载和资源&#xff0c;提高性能并提高生产力和效率。 Grid Engine 可通过优化应用程序、容器和服务的吞吐量和性能&#xff0c;同时极大化本地、混合和云基础设施之间的共享计算资源&#xf…

区块链安全应用-------压力测试

基于已有的链进行测试&#xff08;build_chain默认建的链 四个节 点&#xff09;&#xff1a; 第一步&#xff1a;搭链 1. 安装依赖 在ubuntu操作系统中&#xff0c;操作步骤如下&#xff1a; sudo apt install -y openssl curl 2. 创建操作目录, 下载安装脚本 ## 创建操作…

在誉天学习云计算HCIE,担心考试考不过?

誉天定制化课程内容覆盖了所有考试重点&#xff0c;可以系统地掌握理论与实践知识。 对于笔试&#xff0c;类似于备考驾照理论学习阶段&#xff0c;誉天为大家提供在线模拟测试系统&#xff0c;帮助大家掌握云计算笔试考点。笔试通过后&#xff0c;18个月内&#xff08;一年半…

node.js-包

包的概念 包&#xff1a;将模块&#xff0c;代码&#xff0c;其他资料聚合成的一个文件夹 包分类&#xff1a; 1.项目包&#xff1a;主要用于编写项目和业务逻辑的文件夹 2.软件包&#xff1a;封装工具和方法供开发者使用&#xff08;一般使用npm管理&#xff09; 1&#…

医院敏感文件交互 如何保障安全和效率?

医院会产生大量的敏感文件&#xff0c;这些敏感文件交互时&#xff0c;都需要使用特殊的手段&#xff0c;来保障数据的安全性。 医院的敏感数据主要包括以下几类&#xff1a; 1、患者基本信息&#xff1a;包括患者的姓名、身份证号码、户籍地或现住址、联系方式、文化程度、既…

Rust 使用结构体组织相关联的数据

目录 结构体的定义和实例化 使用字段初始化简写语法使用结构体更新语法从其他实例创建实例使用没有命名字段的元组结构体来创建不同的类型没有任何字段的类单元结构体结构体示例程序 通过派生 trait 增加实用功能方法语法 定义方法带有更多参数的方法关联函数多个 impl 块本文有…

Valentina Studio Pro for Mac:强大的数据库管理工具

Valentina Studio Pro for Mac是一款功能全面、操作高效的数据库管理工具&#xff0c;专为Mac用户设计&#xff0c;旨在帮助用户轻松管理各种类型的数据库。 Valentina Studio Pro for Mac v13.10激活版下载 该软件拥有直观的用户界面&#xff0c;使得数据库管理变得简单直观。…