QJsonDocument
是 Qt 框架中的一个类,用于处理 JSON 数据的序列化和反序列化。它可以将 JSON 对象(QJsonObject
)或 JSON 数组(QJsonArray
)转换为 JSON 文本格式,并且也能将 JSON 文本解析成相应的对象或数组。
基本操作
以下是一些关于 QJsonDocument
的基本操作示例:
1. 创建 QJsonDocument
你可以使用一个 QJsonObject
或 QJsonArray
创建一个 QJsonDocument
:
#include <QJsonDocument>
#include <QJsonObject>
QJsonObject jsonObj;
jsonObj["name"] = "Alice";
jsonObj["age"] = 30;
QJsonDocument doc(jsonObj); // 使用 QJsonObject 创建 QJsonDocument
2. 将 QJsonDocument 转换为 JSON 字符串
使用 toJson()
方法可以将文档转换为字符串,支持多种格式选项:
QString jsonString = doc.toJson(QJsonDocument::Compact); // 紧凑格式
// 或者使用美化格式
QString prettyString = doc.toJson(QJsonDocument::Indented);
3. 从 JSON 字符串创建 QJsonDocument
要从现有的 JSON 字符串解析出一个 QJsonDocument
,可以使用构造函数或静态方法:
QString jsonString = "{\"name\":\"Alice\",\"age\":30}";
QByteArray byteArray = jsonString.toUtf8();
QJsonDocument doc = QJsonDocument::fromJson(byteArray);
4. 检查文档类型
你可以通过 isNull()
、isObject()
和 isArray()
方法检查文档是否有效,以及它是对象还是数组:
if (!doc.isNull()) {
if (doc.isObject()) {
QJsonObject obj = doc.object();
qDebug() << "Name:" << obj["name"].toString();
}
}
5. 获取数据
如果文档是对象,你可以直接访问其中的数据;如果是数组,则需要以不同方式处理:
if (doc.isObject()) {
QJsonObject obj = doc.object();
QString name = obj["name"].toString(); // 获取字段值
}
if (doc.isArray()) {
QJsonArray arr = doc.array();
for (const auto& value : arr) {
qDebug() << value.toString(); // 输出每个元素的值
}
}
示例代码:完整应用场景
下面的代码展示了如何从一个字符串创建 QJsonDocument
,并访问其中的数据。
#include <QCoreApplication>
#include <QDebug>
#include <QByteArray>
#include <QString>
#include <QJsonDocument>
#include <QVariant>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 定义一段JSON字符串
QString jsonString = R"({"name":"Alice","age":30,"skills":["C++","Qt","Python"]})";
QByteArray byteArray = jsonString.toUtf8();
// 从JSON字符串创建一个QJSONDOCUMENT对象
QJsonDocument doc = QJsonDocument::fromJson(byteArray);
if (!doc.isNull() && doc.isObject()) {
// 如果成功解析并且是一个对象,就获取数据
QJsonObject obj = doc.object();
QString name = obj["name"].toString();
int age = obj["age"].toInt();
qDebug() << "Name:" << name;
qDebug() << "Age:" << age;
// 获取技能数组
if (obj.contains("skills") && obj["skills"].isArray()) {
QJSONArray skillsArr = obj["skills"].toArray();
for (const auto& skill : skillsArr) {
qDebug() << "Skill:" << skill.toString(); // 输出每个技能
}
}
// 修改年龄并输出新的JSON
obj["age"] = age + 1; // 增加年龄
QJSDoc updatedDoc(obj);
QString updatedJSONString = updatedDoc.to.Json(QJSDocument:Compact);
qDebug() << "Updated JSON Output:" << updatedJSONString;
}
return a.exec();
}
输出结果示例
运行上述代码可能会输出如下内容:
Name: Alice
Age: 30
Skill: C++
Skill: Qt
Skill: Python
Updated JSON Output: {"name":"Alice","age":31,"skills":["C++","Qt","Python"]}
小结
- 用途:用于解析和生成 JSON 数据。
- 灵活性:能够方便地将复杂的嵌套结构转化为 Qt 内部的数据类型,并进行处理。
- 功能强大:支持从各种格式的输入(如文件、网络等)读取和写入JSON数据。
通过这些功能,你可以在 Qt 应用程序中轻松实现对 JSON 数据的读写操作。
内容由零声教学AI助手提供,问题来源于学员提问
- 1. 创建 QJsonDocument
- 2. 将 QJsonDocument 转换为 JSON 字符串
- 3. 从 JSON 字符串创建 QJsonDocument
- 4. 检查文档类型
- 5. 获取数据