Json 的处理

在 Qt 中处理 JSON 数据时,通常会使用以下头文件:

  1. **QJsonDocument**:用于封装 JSON 文档(可以是 JSON 对象或 JSON 数组)
  2. **QJsonObject**:用于表示 JSON 对象(key-value 形式的 JSON 数据)
  3. **QJsonArray**:用于表示 JSON 数组
  4. **QJsonValue**:用于表示 JSON 对象或数组中的值(可以是字符串、数字、布尔值等)
  5. **QJsonParseError**:用于捕捉 JSON 解析中的错误

序列化和反序列化 JSON 用 QJsonDocument,创建 JSON 用 QJsonObject。

想要在网络中进行传输,需要把 QJsonObject 转换为 QByteArray。

Json.png

创建JSON

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QDebug>

void createJson() {
// 创建 JSON 对象
QJsonObject jsonObj;
jsonObj.insert("name", "John Doe"); // 添加 JSON 数据
jsonObj.insert("age", 30);
jsonObj.insert("isStudent", false);

QJsonArray jsonArray;
jsonArray.append("Reading");
jsonArray.append("Traveling");
jsonArray.append("Swimming");

jsonObj.insert("hobbies", jsonArray);

// 把 JSON 转换为可在网络传输的 QByteArray
QJsonDocument jsonDoc(jsonObj);
QByteArray jsonData = jsonDoc.toJson();

qDebug() << "Created JSON:" << jsonData;
}

解析JSON

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QDebug>

void parseJson(const QByteArray &jsonData) {
QJsonParseError jsonError;
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &jsonError); // 将 JSON 解析为 UTF-8 编码的 JSON 文档,并从中创建 QJsonDocument

if (jsonError.error != QJsonParseError::NoError) { // 如果 解析有误,退出
qDebug() << "JSON parse error:" << jsonError.errorString();
return;
}

if (jsonDoc.isObject()) { // 确保是一个对象
QJsonObject jsonObj = jsonDoc.object(); // 得到 JSON 对象
qDebug() << "Parsed JSON object:" << jsonObj;

if (jsonObj.contains("name")) { // 确保 key 是合法的
qDebug() << "Name:" << jsonObj.value("name").toString(); //获取 key 对应的 v
}
if (jsonObj.contains("age")) {
qDebug() << "Age:" << jsonObj.value("age").toInt();
}
}
}