要点
- 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。
此外,错误处理在这个例子中是非常基础的。在实际应用中,你可能需要更复杂的错误处理逻辑,例如显示错误消息给用户或尝试恢复默认配置。
739

被折叠的 条评论
为什么被折叠?



