要点
- QJsonObject
- QJsonDocument
- QFile file(fileName);
- file.write(jsonDoc.toJson(QJsonDocument::Indented)); // 缩进格式化输出
- QByteArray jsonData = file.readAll();
在 Qt 中,读写 JSON 格式的配置文件通常使用 QJsonDocument
、QJsonObject
、QJsonArray
和 QFile
类。以下是一个简单的例子,展示了如何使用这些类来读写 JSON 文件。
写入 JSON 文件
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject> void writeJsonConfigFile(const QString &fileName) { // 创建一个 QJsonObject QJsonObject jsonObject; jsonObject["user"] = QJsonObject { {"name", "John Doe"}, {"age", 30}, {"email", "johndoe@example.com"} }; // 将 QJsonObject 转换为 QJsonDocument QJsonDocument jsonDoc(jsonObject); // 写入文件 QFile file(fileName); if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { file.write(jsonDoc.toJson(QJsonDocument::Indented)); // 缩进格式化输出 file.close(); }
}
读取 JSON 文件
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug> QJsonObject readJsonConfigFile(const QString &fileName) { QFile file(fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return QJsonObject(); // 返回空对象或处理错误 // 读取文件内容 QByteArray jsonData = file.readAll(); QJsonParseError jsonError; QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &jsonError); // 检查 JSON 解析是否成功 if (jsonError.error != QJsonParseError::NoError) { qDebug() << "JSON 解析错误:" << jsonError.errorString(); return QJsonObject(); // 返回空对象或处理错误 } // 假设顶层是一个 QJsonObject return jsonDoc.object();
} // 使用示例
void useJsonConfigFile(const QString &fileName) { QJsonObject jsonObject = readJsonConfigFile(fileName); if (!jsonObject.isEmpty()) { QJsonObject userObject = jsonObject["user"].toObject(); QString name = userObject["name"].toString(); int age = userObject["age"].toInt(); qDebug() << "Name:" << name << ", Age:" << age; }
}
在这个例子中,writeJsonConfigFile
函数创建了一个包含用户信息的 QJsonObject
,然后将其转换为一个 QJsonDocument
并写入文件。readJsonConfigFile
函数读取一个 JSON 文件,解析其内容,并返回一个 QJsonObject
。如果解析过程中出现错误,它将返回一个空的 QJsonObject
。
请注意,这个例子假设 JSON 文件的顶层是一个对象。如果 JSON 文件以数组开始,你需要相应地调整代码来处理 QJsonArray
。
此外,错误处理在这个例子中是非常基础的。在实际应用中,你可能需要更复杂的错误处理逻辑,例如显示错误消息给用户或尝试恢复默认配置。