QT开发中文网

QJsonDocument

QJsonDocument 是 Qt 框架中的一个类,用于处理 JSON 数据的序列化和反序列化。它可以将 JSON 对象(QJsonObject)或 JSON 数组(QJsonArray)转换为 JSON 文本格式,并且也能将 JSON 文本解析成相应的对象或数组。

基本操作

以下是一些关于 QJsonDocument 的基本操作示例:

1. 创建 QJsonDocument

你可以使用一个 QJsonObjectQJsonArray 创建一个 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. 获取数据
  • 示例代码:完整应用场景
  • 输出结果示例
  • 小结
  • 本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
    转载请注明出处:https://qt.0voice.com/?id=12909

    分享:
    扫描分享到社交APP
    上一篇
    下一篇
    发表列表
    游客 游客
    此处应有掌声~
    评论列表

    还没有评论,快来说点什么吧~

    联系我们

    在线咨询: 点击这里给我发消息

    微信号:3007537140

    上班时间: 10:30-22:30

    关注我们
    x

    注册

    已经有帐号?