在Qt中解析JSON,包含对象和数组对象的情况,可以使用QJsonDocument和相关的类来实现。以下是一个示例代码:
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
QString jsonString = R"(
{
"name": "Alice",
"age": 25,
"languages": ["C++", "Python", "Java"],
"address": {
"city": "Shanghai",
"country": "China"
}
}
)";
int main(int argc, char *argv[])
{
QJsonParseError error;
// 将JSON字符串转换为JSON文档
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8(), &error);
if (error.error != QJsonParseError::NoError) {
qDebug() << "JSON解析错误:" << error.errorString();
return -1;
}
if (jsonDoc.isObject()) {
// 获取根对象
QJsonObject rootObj = jsonDoc.object();
// 解析基本属性值
QString name = rootObj["name"].toString();
int age = rootObj["age"].toInt();
qDebug() << "Name:" << name;
qDebug() << "Age:" << age;
// 解析数组对象
QJsonValue languagesValue = rootObj["languages"];
if (languagesValue.isArray()) {
QJsonArray languagesArray = languagesValue.toArray();
qDebug() << "\nLanguages:";
for (const QJsonValue& language : languagesArray) {
qDebug() << language.toString();
}
}
// 解析嵌套对象
QJsonValue addressValue = rootObj["address"];
if (addressValue.isObject()) {
QJsonObject addressObj = addressValue.toObject();
QString city = addressObj["city"].toString();
QString country = addressObj["country"].toString();
qDebug() << "\nAddress:";
qDebug() << "City:" << city;
qDebug() << "Country:" << country;
}
}
return 0;
}
这个示例中,我们首先将JSON字符串转换为QJsonDocument对象。然后,我们通过使用isObject()
方法来验证根节点是否是一个对象类型。接下来,我们可以使用[]
操作符获取对象的属性值,并使用相应的类型转换函数(如toString()
和toInt()
)解析基本属性值。
对于数组对象,我们可以使用类似的方法将其作为QJsonValue进行处理。如果它是一个数组类型(使用isArray()
进行验证),我们就可以通过迭代数组元素并调用相应的访问函数(如toString()
)来解析其中的值。
对于嵌套对象,我们同样使用类似的方法进行处理。如果它是一个对象类型(使用isObject()
进行验证),我们可以获取嵌套对象并按照需要解析其属性值。
希望这个示例对你有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问