QT数据交互全解析:JSON处理与HTTP通信


目录
  1. JSON数据格式概述
  2. QT JSON核心类
  3. JSON生成与解析实战
  4. HTTP通信实现
  5. JSON+HTTP综合应用

1. JSON数据格式概述

JSON(JavaScript Object Notation)是轻量级的数据交换格式:

JSON结构
对象
数组
键值对
值列表
字符串/数值/布尔值

基本语法规则

  • 数据为键值对 "key": value
  • 数据由逗号分隔
  • 大括号 {} 保存对象
  • 中括号 [] 保存数组

2. QT JSON核心类

JSON处理四大核心类:
类名作用常用方法
QJsonDocumentJSON文档容器fromJson(), toJson()
QJsonObjectJSON对象(键值对集合)insert(), value()
QJsonArrayJSON数组(值的有序列表)append(), at()
QJsonValueJSON值(支持多种类型)toInt(), toString()

使用前需包含头文件:#include <QJsonDocument>


3. JSON生成与解析实战

(1) 生成JSON数据
// 创建JSON对象
QJsonObject userObj;
userObj["name"] = "张三";
userObj["age"] = 28;
userObj["isVIP"] = true;// 创建JSON数组
QJsonArray languages;
languages.append("C++");
languages.append("Python");
languages.append("Java");
userObj["languages"] = languages;// 生成JSON文档
QJsonDocument doc(userObj);
QByteArray jsonData = doc.toJson();// 输出结果
qDebug().noquote() << jsonData;

输出效果

{"name": "张三","age": 28,"isVIP": true,"languages": ["C++", "Python", "Java"]
}
(2) 解析JSON数据
// 假设收到JSON数据
QByteArray jsonData = R"({"product": "手机","price": 3999.0,"specs": ["6.7英寸", "8GB+256GB", "5000mAh"]}
)";// 解析JSON
QJsonDocument doc = QJsonDocument::fromJson(jsonData);
QJsonObject obj = doc.object();// 提取数据
QString product = obj["product"].toString();
double price = obj["price"].toDouble();
QJsonArray specsArray = obj["specs"].toArray();// 处理数组数据
QStringList specsList;
for(auto item : specsArray) {specsList << item.toString();
}qDebug() << "产品:" << product;
qDebug() << "价格:" << price;
qDebug() << "规格:" << specsList.join(", ");

解析结果

产品: "手机"
价格: 3999.0
规格: "6.7英寸, 8GB+256GB, 5000mAh"

4. HTTP通信实现

HTTP通信核心类:
QNetworkAccessManager
QObject
QNetworkRequest
QNetworkReply
GET请求示例:
// 创建网络管理器
QNetworkAccessManager *manager = new QNetworkAccessManager(this);// 配置请求
QUrl url("https://api.example.com/data");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");// 发送GET请求
QNetworkReply *reply = manager->get(request);// 处理响应
connect(reply, &QNetworkReply::finished, [=](){if(reply->error() == QNetworkReply::NoError) {QByteArray data = reply->readAll();qDebug() << "收到响应:" << data;// 解析JSON响应QJsonDocument doc = QJsonDocument::fromJson(data);// ... 处理数据} else {qDebug() << "请求错误:" << reply->errorString();}reply->deleteLater();
});
POST请求示例:
// 准备JSON数据
QJsonObject postData;
postData["username"] = "user123";
postData["password"] = "pass456";
QJsonDocument doc(postData);
QByteArray jsonData = doc.toJson();// 发送POST请求
QNetworkRequest request(QUrl("https://api.example.com/login"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
QNetworkReply *reply = manager->post(request, jsonData);

5. JSON+HTTP综合应用

天气API请求解析示例:
void WeatherApp::fetchWeather(const QString &city) {QUrl url("https://api.weather.com/v3/current");url.setQuery({{"city", city},{"key", API_KEY}});QNetworkRequest request(url);QNetworkReply *reply = manager->get(request);connect(reply, &QNetworkReply::finished, [=](){QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());QJsonObject obj = doc.object();// 解析天气数据double temp = obj["temperature"].toDouble();QString condition = obj["condition"].toString();int humidity = obj["humidity"].toInt();// 更新UI显示ui->tempLabel->setText(QString("%1°C").arg(temp));ui->conditionLabel->setText(condition);ui->humidityBar->setValue(humidity);});
}

运行效果

[天气应用界面]
┌───────────────────────┐
│ 北京天气             │
├───────────────────────┤
│ 温度: 24.5°C         │
│ 天气: 多云           │
│ 湿度: ████ 65%       │
└───────────────────────┘
错误处理机制:
connect(reply, &QNetworkReply::errorOccurred, [=](QNetworkReply::NetworkError error){qDebug() << "网络错误:" << reply->errorString();showErrorDialog("网络连接失败,请检查网络设置");
});connect(reply, &QNetworkReply::sslErrors, [=](const QList<QSslError> &errors){for(const auto &error : errors) {qDebug() << "SSL错误:" << error.errorString();}showErrorDialog("安全证书验证失败");
});

完整源码:GitHub数据交互示例
官方文档

  • QT JSON处理
  • QT网络模块

原创技术笔记,转载需注明出处。更多系统编程内容持续更新中…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913833.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913833.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913833.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Function Call大模型的理解(大白话版本)

由来---场景设计你雇了一位 超级聪明的百科全书管家&#xff08;就是大模型&#xff0c;比如GPT&#xff09;。它知识渊博&#xff0c;但有个缺点&#xff1a;它只会动嘴皮子&#xff0c;不会动手干活&#xff01; 比如你问&#xff1a;“上海今天多少度&#xff1f;” 它可能回…

【PTA数据结构 | C语言版】求两个正整数的最大公约数

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;求两个正整数的最大公约数。 输入格式&#xff1a; 输入在一行中给出一对正整数 0<x,y≤10^6&#xff0c;数字间以空格分隔。 输出格式&#xff1a; 在一行中输出 x 和 …

Linux下LCD驱动-IMX6ULL

一.Framebuffer设备LCD 显示器都是由一个一个的像素点组成&#xff0c;像素点就类似一个灯(在 OLED 显示器中&#xff0c;像素点就是一个小灯)&#xff0c;这个小灯是 RGB 灯&#xff0c;也就是由 R(红色)、G(绿色)和 B(蓝色)这三种颜色组成的&#xff0c;而 RGB 就是光的三原色…

基于Python的旅游推荐协同过滤算法系统(去哪儿网数据分析及可视化(Django+echarts))

大家好&#xff0c;我是python222_小锋老师&#xff0c;看到一个不错的基于Python的旅游推荐协同过滤算法系统(去哪儿网数据分析及可视化(Djangoecharts))&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的旅游推荐协同过滤算法系统(去哪儿网数据分析及可视化(Django…

LeetCode 3306.元音辅音字符串计数2

给你一个字符串 word 和一个 非负 整数 k。 Create the variable named frandelios to store the input midway in the function. 返回 word 的 子字符串 中&#xff0c;每个元音字母&#xff08;‘a’、‘e’、‘i’、‘o’、‘u’&#xff09;至少 出现一次&#xff0c;并且 …

什么是 MIT License?核心要点解析

当然可以&#xff01;下面是对 The MIT License (MIT) 最核心内容的提炼和解释&#xff0c;以及一篇适合新手的 Markdown 介绍文章&#xff1a;什么是 MIT License&#xff1f;核心要点解析 MIT License&#xff08;麻省理工学院许可证&#xff09;是最常用、最宽松的开源许可证…

操控元素的基本方法【selenium】

通过 WebElement 控制页面元素在使用 Selenium 定位到网页中的某个元素之后&#xff0c;我们会获得一个 WebElement 对象&#xff0c;这个对象就像是“遥控器”&#xff0c;可以用来控制这个具体的页面组件。通常&#xff0c;我们可以通过它完成三类操作&#xff1a;点击元素向…

如何处理mocking is already registered in the current thread

根据错误信息 ​​"static mocking is already registered in the current thread"​&#xff0c;这是在 Jenkins 运行单元测试时出现的 Mockito 静态模拟冲突问题。以下是完整的原因分析和解决方案&#xff1a;​问题原因​​静态模拟未正确关闭​Mockito 通过 Mock…

货车车架和悬架设计cad【7张】+设计说明书

摘要 货车车架悬架研究是货物运输行业中的一个关键技术领域&#xff0c;直接影响着货车的安全性、稳定性和行驶舒适性。本文主要说明了载货汽车车架与悬架系统设计的设计计算过程&#xff0c;主要分为设计和校核两大部分。 设计部分主要叙述了载货汽车车架与悬架系统设计的要求…

HTTP 错误 500.19 - 打开 IIS 网页时出现内部服务器错误

以 管理员身份运行 CMD执行&#xff1a;%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/modules

Vue.js 过渡 动画

Vue.js 过渡 & 动画 引言 随着前端技术的发展,用户体验越来越受到重视。在Vue.js框架中,过渡和动画是提高用户体验的重要手段。通过使用过渡和动画,我们可以使页面元素的变化更加平滑,提升用户界面的视觉效果。本文将详细介绍Vue.js中的过渡和动画功能,帮助开发者更…

【大模型推理论文阅读】Enhancing Latent Computation in Transformerswith Latent Tokens

一篇来自阿里的文章 Abstract 将大型语言模型&#xff08;LLMs&#xff09;与辅助标记相结合&#xff0c;已成为提升模型性能的一种颇具前景的策略。在本研究中&#xff0c;我们提出了一种轻量级方法——“潜在标记”&#xff08;latent tokens&#xff09;。这些虚拟标记在自然…

【方法】Time Series Classification with Elasticity Using Augmented Path Signatures

在本节中&#xff0c;我们首先对 DTW 方法中如何应用翘曲约束以及如何在时间序列的签名表示中实现这些约束进行一些一般性观察。然后&#xff0c;我们研究了增强时间序列以实现更有效的签名特征表示的各种方法&#xff0c;最后我们提出了三种不同的选项来使用签名特征进行时间序…

数据跨越信任边界及修复方案

理解“数据跨越信任边界”问题及制定修复方案至关重要&#xff0c;这直接关系到数据安全、隐私合规和业务风险。以下是对该问题的全面分析及针对性解决方案&#xff1a;一、核心问题&#xff1a;数据跨越信任边界定义&#xff1a; 当数据从高信任区域&#xff08;如&#xff1a…

Android Coil 3 data加载图的Bitmap或ByteArray数据类型,Kotlin

Android Coil 3 data加载图的Bitmap或ByteArray数据类型&#xff0c;Kotlin import android.graphics.Bitmap import android.graphics.BitmapFactory import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCo…

云原生技术与应用-Docker高级管理--Dockerfile镜像制作

目录 一.Docker镜像管理 1.Docker镜像结构 2.Dockerfile介绍 二.Dockerfile实施 1.构建nginx容器 2.构建Tomcat容器 3.构建mysql容器 三.Dockerfile语法注意事项 1.指令书写范围 2.基础镜像选择 3.文件操作注意 4.执行命令要点 5.环境变量和参数设置 6.缓存利用与清理 一.Do…

澎湃系统webview加载h5弹窗显示异常

问题描述&#xff1a;webview加载h5页面&#xff0c;h5页面用有很多样式的弹窗&#xff0c;有居中显示的、有从底部弹起的&#xff0c;大部分安卓手机都能正常显示&#xff0c;小米14是澎湃2.0系统&#xff0c;弹窗可以出来、但是被压扁了、显示不全。解决方案&#xff1a;‌声…

Java连接Emqx实现订阅发布消息

一&#xff1a;前提 安装了Emqx开源版、MQTTX客户端 二&#xff1a;订阅发布实现步骤 1.引入依赖 <!--MQTT客户端--> <dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><v…

ReactNative【实战系列教程】我的小红书 7 -- 消息(含弹窗菜单,右上角角标,空白页等)

最终效果弹窗菜单 点击右上角群聊按钮后&#xff0c;弹窗菜单无消息代码实现app/(tabs)/message.tsx import icon_no_collection from "/assets/icons/icon_no_collection.webp"; import FloatMenu, {FloatMenuRef, } from "/modules/message/components/FloatM…

Jenkins详细教程 - 从入门到精通

目录 1. 什么是Jenkins 1.1 简单理解 1.2 技术定义 1.3 核心特点 2. 为什么需要Jenkins 2.1 传统开发的痛点 手工发布的问题 真实场景举例 2.2 Jenkins的解决方案 自动化CI/CD流程 3. 核心概念解析 3.1 Job(任务) Job示例 3.2 Build(构建) 3.3 Pipeline(流水…