【QT】-解析打包json

server/2025/3/16 21:52:20/

在 Qt 中,接收到 JSON 字符串后,可以通过 QJsonDocument 来解析 JSON 数据,获取字段值。同时,可以使用 QJsonDocument 将数据打包成 JSON 字符串,然后发送到 RabbitMQ 或其他地方。这个方法在 Qt 中非常常见且稳定。

解析 JSON 字符串:
首先,使用 QJsonDocument::fromJson 方法将 JSON 字符串解析为 QJsonDocument,然后使用 QJsonObject 或 QJsonArray 获取其中的字段。

打包发送 JSON 字符串:
可以使用 QJsonObject 和 QJsonDocument 将数据打包成 JSON 字符串,然后将其发送到 RabbitMQ。

以下是一个示例,包括如何接收 JSON 数据、解析字段以及如何打包数据并发送 JSON 字符串:

  1. 解析接收到的 JSON 字符串:
#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>void parseJson(const QByteArray &jsonData) {// 将 JSON 字符串解析为 QJsonDocumentQJsonDocument doc = QJsonDocument::fromJson(jsonData);// 检查是否解析成功if (!doc.isNull()) {// 如果 JSON 数据是一个对象,获取 QJsonObjectif (doc.isObject()) {QJsonObject obj = doc.object();// 解析字段QString name = obj["name"].toString();int age = obj["age"].toInt();QString city = obj["city"].toString();// 输出解析的字段值qDebug() << "Name:" << name;qDebug() << "Age:" << age;qDebug() << "City:" << city;}} else {qDebug() << "Failed to parse JSON data!";}
}int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 模拟接收到的 JSON 字符串QByteArray jsonData = R"({"name": "John", "age": 30, "city": "New York"})";// 解析 JSON 字符串parseJson(jsonData);return a.exec();
}
2. 打包数据并发送为 JSON 字符串:
假设你有一些数据需要打包成 JSON 字符串并发送到 RabbitMQ。#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>QByteArray createJsonPacket() {// 创建 QJsonObject 对象QJsonObject obj;obj["name"] = "Alice";obj["age"] = 25;obj["city"] = "Los Angeles";// 将 QJsonObject 打包成 QJsonDocumentQJsonDocument doc(obj);// 将 QJsonDocument 转换为 JSON 字符串 (QByteArray)QByteArray jsonData = doc.toJson();return jsonData;
}int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 创建一个 JSON 包QByteArray jsonPacket = createJsonPacket();// 输出打包后的 JSON 数据qDebug() << "JSON Packet to send:" << jsonPacket;// 此时,可以将 jsonPacket 发送到 RabbitMQ 或其他地方// (发送代码示例,视你所用的 RabbitMQ 库而定)return a.exec();
}

关键步骤总结:
解析接收到的 JSON 字符串:

使用 QJsonDocument::fromJson 将 JSON 字符串解析为 QJsonDocument 对象。
从 QJsonDocument 获取 QJsonObject 或 QJsonArray,然后访问字段。
打包数据成 JSON 字符串:

使用 QJsonObject 创建数据对象。
使用 QJsonDocument 将 QJsonObject 转换为 JSON 字符串,并可以通过 toJson() 获取 QByteArray。
发送 JSON 数据到 RabbitMQ:

使用 QAMQP 或其他类似的库连接到 RabbitMQ 并发送 JSON 数据。
建议的最佳实践:
结构化数据:使用 QJsonObject 和 QJsonArray 来保持 JSON 数据的结构清晰,避免复杂的字符串拼接。
错误处理:确保对 JSON 解析失败的情况进行错误处理。
性能考虑:如果处理非常大的 JSON 数据集,可以考虑优化内存管理,避免内存泄漏。
使用可靠的库:如 QAMQP 等库来简化与 RabbitMQ 的集成,确保通信的稳定性和可靠性。
这种方式在 Qt 中解析和生成 JSON 数据,结合 RabbitMQ 进行消息传递,是非常稳定和广泛使用的方法。


http://www.ppmy.cn/server/175530.html

相关文章

Java基础语法练习42(基本绘图-基本的事件处理机制-小坦克的绘制-键盘控制坦克移动)

目录 一、图形的基本绘制 1.基本介绍&#xff1a; 2.入门代码如下&#xff1a; 3.常用图形的绘制, 示例代码如下&#xff1a; 二、坦克的绘制 三、事件处理机制 四、坦克的移动 一、图形的基本绘制 1.基本介绍&#xff1a; Component 类提供了两个和绘图相关最重要的方…

CentOS系统中使用sendmail

在CentOS系统中&#xff0c;如果你想要使用sendmail来发送电子邮件&#xff0c;你可以通过以下步骤来配置和测试它。sendmail是Linux系统上常用的邮件传输代理&#xff08;MTA&#xff09;&#xff0c;它可以用来发送邮件。 步骤1&#xff1a;安装sendmail 首先&#xff0c;你…

常见的死锁情况分析

死锁 定义&#xff1a; 是指多个进程或线程在执行过程中&#xff0c;由于竞争资源或因通信的需要而产生的相互等待的状态&#xff0c;使得它们无法继续执行下去&#xff08;单线程中使用不恰当也会导致死锁问题&#xff09;。 如下为常见的死锁原因&#xff1a; a. 互斥条件…

股指期货的锁仓是什么意思?

股指期货锁仓是指投资者在持有某一方向仓位的同时&#xff0c;反向开立一个数量相等但方向相反的仓位。这种操作类似于给持仓“上锁”&#xff0c;无论市场价格如何波动&#xff0c;锁仓后的盈亏状态都不会再发生变化。锁仓的主要目的是在不确定的市场环境下&#xff0c;锁定当…

利用Python爬虫根据关键词获取商品列表

在电商领域&#xff0c;通过关键词搜索商品并获取商品列表是常见的需求。本文将详细介绍如何使用Python编写爬虫程序&#xff0c;根据关键词获取商品列表&#xff0c;并确保爬虫行为符合平台规范。为了具体展示&#xff0c;我们将以一个假设的电商平台为例&#xff0c;展示如何…

Python 实现的采集诸葛灵签

Python 实现的采集诸葛灵签 项目介绍 这是一个基于 Python 开发的诸葛灵签数据采集和展示项目。通过爬虫技术获取诸葛神签的签文和解签内容&#xff0c;并提供数据存储和查询功能。 项目结构 zhuge/├── zhuge_scraper.py # 爬虫主程序├── zhuge_pages/ # 数据存储目录…

TCP 三次握手四次挥手过程详解

注&#xff1a;本文为 “TCP 的三次握手与四次挥手” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;未整理去重。 英文引文第二篇&#xff0c;实为国内《稀土掘金技术社区》文章&#xff0c;没检索到原文&#xff0c;此处 “出口转内销” 。 如有内…

MCU的工作原理:嵌入式系统的控制核心

MCU的工作原理可以概括为以下几个步骤&#xff1a; 1. 初始化 上电后&#xff0c;MCU从Flash存储器中加载程序代码&#xff0c;并初始化外设和寄存器。 2. 任务执行 根据程序逻辑&#xff0c;MCU执行数据处理、外设控制和通信等任务。通过中断系统实时响应外部事件。 3. 低…