如果您的 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();
}
代码说明
解析
hobbies
数组:- 在每个主对象内,我们检查是否存在
"hobbies"
键,并且它是否为数组。 - 如果是,则将其转换为
QJsonArray
并遍历每个爱好,打印出来。
- 在每个主对象内,我们检查是否存在
打印结果:
- 对于每个人的名字和年龄信息之后,会列出他们的爱好。
注意事项
- 确保在访问嵌套数据之前进行适当的检查,以确保不会出现空值或类型不匹配的情况。
- 您可以根据需求进一步扩展此示例,比如添加更多字段、支持不同的数据类型等。
内容由零声教学AI助手提供,问题来源于学员提问