如果您要传入的是一个 QString
类型的 JSON 数据而不是从文件读取,您可以直接使用 QJsonDocument::fromJson()
方法来解析这个字符串。下面是修改后的示例代码,展示如何从一个 QString
中解析 JSON 数据。
示例代码
假设我们有以下 JSON 数据以字符串形式存储:
QString jsonData = R"({
"name": "John Doe",
"age": 30,
"isEmployed": true,
"skills": ["C++", "Qt", "Python"]
})";
C++ 代码
#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
void parseJsonString(const QString &jsonString) {
// 将 QString 转换为 QByteArray
QByteArray jsonData = jsonString.toUtf8();
// 解析JSON文档
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
if (jsonDoc.isNull()) {
qWarning() << "Failed to create JSON doc.";
return;
}
// 检查是否为对象或数组
if (jsonDoc.isObject()) {
QJsonObject jsonObj = jsonDoc.object();
// 提取数据
QString name = jsonObj["name"].toString();
int age = jsonObj["age"].toInt();
bool isEmployed = jsonObj["isEmployed"].toBool();
qDebug() << "Name:" << name;
qDebug() << "Age:" << age;
qDebug() << "Is Employed:" << isEmployed;
// 处理数组字段
QJsonArray skillsArray = jsonObj["skills"].toArray();
qDebug() << "Skills:";
for (const auto &skill : skillsArray) {
qDebug() << skill.toString();
}
} else {
qWarning() << "JSON is not an object.";
}
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QString jsonData = R"({
"name": "John Doe",
"age": 30,
"isEmployed": true,
"skills": ["C++", "Qt", "Python"]
})";
parseJsonString(jsonData); // 调用函数解析 JSON 字符串
return a.exec(); // 启动事件循环(如果需要)
}
解释
- 传入的参数: 函数
parseJsonString
接受一个QString
类型的参数,其中包含了 JSON 格式的数据。 - 转换格式: 使用
toUtf8()
方法将QString
转换为QByteArray
,这是因为QJsonDocument::fromJson()
函数需要字节数组作为输入。 - 解析过程: 和之前相同,使用
QJsonDocument::fromJson()
来创建 JSON 文档,并检查其有效性。 - 提取信息: 提取具体字段并打印输出,与从文件读取的方式一致。
这种方法适用于直接操作内存中的 JSON 数据,而不必涉及文件 I/O。这对于某些应用场景(如网络请求返回的数据)非常实用。
内容由零声教学AI助手提供,问题来源于学员提问