QT开发中文网

上述,如果是循环嵌套,如何解析,第三层是一个array

如果您的 JSON 数据结构包含循环嵌套,并且第三层是一个数组,您可以按照类似的方式进行解析。以下是一个示例 JSON 数据结构,展示了如何处理这种情况。

示例 JSON 文件 (data.json)

假设您的 data.json 文件内容如下:

[
    {
        "name": "Alice",
        "age": 30,
        "hobbies": ["Reading", "Traveling"]
    },
    {
        "name": "Bob",
        "age": 25,
        "hobbies": ["Gaming", "Cycling"]
    },
    {
        "name": "Charlie",
        "age": 35,
        "hobbies": ["Cooking", "Hiking", "Photography"]
    }
]

在这个例子中,每个对象都有一个 hobbies 字段,该字段是一个数组。

C++ 示例代码

下面是解析该结构的示例代码:

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

class JsonArrayHandler {
public:
    JsonArrayHandler(const QString &filePath) {
        loadJson(filePath);
    }

    void printAllEntries() {
        if (jsonDoc.isNull()) {
            qDebug() << "JSON document is null.";
            return;
        }

        if (jsonDoc.isArray()) {
            QJsonArray jsonArray = jsonDoc.array();
            for (const QJsonValue &value : jsonArray) {
                if (value.isObject()) {
                    QJsonObject obj = value.toObject();
                    QString name = obj["name"].toString();
                    int age = obj["age"].toInt();

                    qDebug() << "Name:" << name << ", Age:" << age;

                    // 解析 hobbies 数组
                    if (obj.contains("hobbies") && obj["hobbies"].isArray()) {
                        QJsonArray hobbiesArray = obj["hobbies"].toArray();
                        qDebug() << "Hobbies:";
                        for (const QJsonValue &hobby : hobbiesArray) {
                            qDebug() << "- " + hobby.toString();
                        }
                    }
                }
            }
        } else {
            qDebug() << "Top-level element is not an array.";
        }
    }

private:
    void loadJson(const QString &filePath) {
        QFile file(filePath);
        if (!file.open(QIODevice::ReadOnly)) {
            qDebug() << "Could not open the file!";
            return;
        }

        QByteArray jsonData = file.readAll();
        file.close();

        jsonDoc = QJsonDocument::fromJson(jsonData);
    }

    QJsonDocument jsonDoc;
};

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

    JsonArrayHandler handler("data.json");
    
    // 打印所有条目
    handler.printAllEntries();

    return a.exec();
}

代码说明

  1. 解析 hobbies 数组

    • 在每个主对象内,我们检查是否存在 "hobbies" 键,并且它是否为数组。
    • 如果是,则将其转换为 QJsonArray 并遍历每个爱好,打印出来。
  2. 打印结果

    • 对于每个人的名字和年龄信息之后,会列出他们的爱好。

注意事项

  • 确保在访问嵌套数据之前进行适当的检查,以确保不会出现空值或类型不匹配的情况。
  • 您可以根据需求进一步扩展此示例,比如添加更多字段、支持不同的数据类型等。


    内容由零声教学AI助手提供,问题来源于学员提问
目录导航
  • 示例 JSON 文件 (data.json)
  • C++ 示例代码
  • 代码说明
  • 注意事项
  • 本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
    转载请注明出处:https://qt.0voice.com/?id=12591

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

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

    联系我们

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

    微信号:3007537140

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

    关注我们
    x

    注册

    已经有帐号?