QT开发中文网

上述,传入的是qstring类型json数据,然后

如果您要传入的是一个 QString 类型的 JSON 数据而不是从文件读取,您可以直接使用 QJsonDocument::fromJson() 方法来解析这个字符串。下面是修改后的示例代码,展示如何从一个 QString 中解析 JSON 数据。

示例代码

假设我们有以下 JSON 数据以字符串形式存储:

QString jsonData = R"({
    "name": "John Doe",
    "age": 30,
    "isEmployed": true,
    "skills": ["C++", "Qt", "Python"]
})";

C++ 代码

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>

void parseJsonString(const QString &jsonString) {
    // 将 QString 转换为 QByteArray
    QByteArray jsonData = jsonString.toUtf8();

    // 解析JSON文档
    QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);

    if (jsonDoc.isNull()) {
        qWarning() << "Failed to create JSON doc.";
        return;
    }

    // 检查是否为对象或数组
    if (jsonDoc.isObject()) {
        QJsonObject jsonObj = jsonDoc.object();

        // 提取数据
        QString name = jsonObj["name"].toString();
        int age = jsonObj["age"].toInt();
        bool isEmployed = jsonObj["isEmployed"].toBool();
        
        qDebug() << "Name:" << name;
        qDebug() << "Age:" << age;
        qDebug() << "Is Employed:" << isEmployed;

        // 处理数组字段
        QJsonArray skillsArray = jsonObj["skills"].toArray();
        
        qDebug() << "Skills:";
        for (const auto &skill : skillsArray) {
            qDebug() << skill.toString();
        }
        
    } else {
        qWarning() << "JSON is not an object.";
    }
}

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    QString jsonData = R"({
        "name": "John Doe",
        "age": 30,
        "isEmployed": true,
        "skills": ["C++", "Qt", "Python"]
    })";

    parseJsonString(jsonData); // 调用函数解析 JSON 字符串

    return a.exec();           // 启动事件循环(如果需要)
}

解释

  1. 传入的参数: 函数 parseJsonString 接受一个 QString 类型的参数,其中包含了 JSON 格式的数据。
  2. 转换格式: 使用 toUtf8() 方法将 QString 转换为 QByteArray,这是因为 QJsonDocument::fromJson() 函数需要字节数组作为输入。
  3. 解析过程: 和之前相同,使用 QJsonDocument::fromJson() 来创建 JSON 文档,并检查其有效性。
  4. 提取信息: 提取具体字段并打印输出,与从文件读取的方式一致。

这种方法适用于直接操作内存中的 JSON 数据,而不必涉及文件 I/O。这对于某些应用场景(如网络请求返回的数据)非常实用。


内容由零声教学AI助手提供,问题来源于学员提问

目录导航
  • 示例代码
  • C++ 代码
  • 解释
  • 本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
    转载请注明出处:https://qt.0voice.com/?id=12517

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

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

    联系我们

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

    微信号:3007537140

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

    关注我们
    x

    注册

    已经有帐号?