如果JSON格式的顶层是一个数组类型,您可以使用 QJsonArray
来解析这个数组。以下是如何读取一个以数组为顶层结构的JSON文件的示例。
示例 JSON 文件 (data.json
)
假设您的 data.json
文件内容如下:
[
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
{"name": "Charlie", "age": 35}
]
C++ 示例代码
下面是一个示例程序,演示如何解析这种结构的JSON文件并访问其中的数据:
#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;
}
}
} 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();
}
代码说明
类
JsonArrayHandler
:- 在构造函数中加载 JSON 数据。
- 提供方法
printAllEntries()
,用于遍历 JSON 数组中的每个对象,并打印出"name"
和"age"
的值。
方法
loadJson()
:负责从指定路径读取 JSON 文件,并将其解析为QJsonDocument
。主函数:创建
JsonArrayHandler
实例并调用printAllEntries()
方法来输出数组中的数据。
注意事项
- 确保在处理之前检查是否成功加载和解析了JSON文件,以防止空指针引用等问题。
- 您也可以根据需要扩展该类,以添加更多的方法或功能,比如查找特定条件下的数据。
内容由零声教学AI助手提供,问题来源于学员提问