JSON 数据封装
JSON 与三个核心类
JSON(JavaScript Object Notation)是一种标准的数据交互格式,常用于两个系统/模块之间通信,也可作为软件本地的配置文件。Qt 提供三个核心类:QJsonObject(JSON 对象,键值对集合)、QJsonArray(JSON 数组)、QJsonDocument(JSON 文档,负责对象/数组与字节流之间的转换)。
封装流程:QJsonObject 装数据 → QJsonDocument doc(obj) 包一层 → doc.toJson() 转 QByteArray 发送。
解析流程:QJsonDocument::fromJson(收到的字节) → .object() 还原对象 → obj"键".toString() 取值。
取值要按类型转换:obj"name".toString()(字符串)、obj"age".toInt()(整数)。
QJsonArray 用 append() 加元素,遍历时每个元素用 toInt()/toString() 转类型。
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
// —— 发送方:封装 ——
QJsonObject obj;
obj.insert("name", "yangyang"); // 键值对
obj.insert("pwd", "666");
QJsonDocument doc(obj); // 对象包进文档
QByteArray wdata = doc.toJson(); // 转字节流,可发送
// cli->write(wdata); // 网络发送
// —— 接收方:解析 ——
QJsonDocument mydoc = QJsonDocument::fromJson(wdata); // 字节流还原
QJsonObject robj = mydoc.object(); // 取对象
qDebug() << robj["name"].toString() // 按类型取值
<< robj["pwd"].toString();
// —— 数组 ——
QJsonArray arr;
arr.append(11); // 加元素
arr.append(12);
QJsonDocument d2(arr); // 数组也可包进文档
QByteArray b2 = d2.toJson();
// 解析后遍历
QJsonArray myarr = QJsonDocument::fromJson(b2).array();
for (auto i : myarr)
qDebug() << i.toInt();