QT开发中文网

qt解析json,json包含对象以及数组对象

在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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=10712

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?