【QT】-解析打包json

ops/2025/3/14 23:33:40/

在 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/ops/165788.html

相关文章

Chrome 扩展开发 API实战:Proxy(七)

1. 引言 在现代浏览器生态中&#xff0c;代理设置是提升网络访问速度、保障隐私安全的重要手段。对于开发者而言&#xff0c;掌握如何在 Chrome 扩展程序中配置代理功能&#xff0c;不仅能满足特定的网络需求&#xff0c;还能为用户提供更灵活的上网体验。本文将以通俗易懂的语…

探索移动端开发新可能: Android Termux环境下部署MariaDB数据库

文章目录 前言1. 安装MariaDB2. 安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 在这个数字时代&#xff0c;我们的智能手机早已突破了通话、发短信和刷社交媒体的界限。你知道吗&#xff1f;现在的智能机性能强大到足以支持我们进行…

Linux基础开发工具—vim

目录 1、vim的概念 2、vim的常见模式 2.1 演示切换vim模式 3、vim命令模式常用操作 3.1 移动光标 3.2 删除文字 3.3 复制 3.4 替换 4、vim底行模式常用命令 4.1 查找字符 5、vim的配置文件 1、vim的概念 Vim全称是Vi IMproved&#xff0c;即说明它是Vi编辑器的增强…

大白话解释 React 中高阶组件(HOC)的概念和应用场景,并实现一个简单的 HOC。

高阶组件&#xff08;HOC&#xff09;的概念 在 React 里&#xff0c;高阶组件&#xff08;Higher-Order Component&#xff0c;简称 HOC&#xff09;就像是一个“超级工厂函数”。它本身是一个函数&#xff0c;而且这个函数接收一个组件作为参数&#xff0c;然后返回一个新的…

Linux常见指令

Linux常见指令 1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令和rm指令7、man指令8、cp指令9、mv指令10、cat指令11、重定向12、more指令13、less指令14、head指令15、tail指令16、管道17、时间相关指令18、cal指令19、find指令20、grep指令21、zip/unzip指…

【MySQL是怎么运行的】二、索引

引擎层有支持索引&#xff0c;如InnoDB和MyISAM&#xff0c;区别就是InnoDB支持事务、外键和行锁 索引物理结构 页&#xff1a;一页16KB&#xff0c;一页包含了多行记录 行&#xff1a;包含元数据和真实数据 元数据&#xff1a; record_type&#xff08;记录的类型&#xff…

内检实验室LIMS系统在汽车制造行业的应用

随着汽车制造行业的快速发展&#xff0c;内检实验室在确保产品质量、提升生产效率和满足法规要求方面扮演着越来越重要的角色。内检实验室LIMS系统&#xff08;实验室信息管理系统&#xff09;通过数字化和自动化手段&#xff0c;为汽车制造行业的实验室管理带来了革命性的变化…

手写svm primal form形式

svm.py import numpy as npclass SVM:def __init__(self,C1.0,lr0.01,batch_size32,epochs100):self.CCself.lrlrself.batch_sizebatch_sizeself.epochsepochsself.wNoneself.b0.0self.epoch0#计算最高得分和对应w&#xff0c;bdef fit(self,X,y,X_valNone,y_valNone):sample,…