• Qt简单的解析Json数据例子(一)


    要解析的json的格式为:

    {
        "rootpath": "001",
        "usernum": 111,
        "childdep": [
            {
                "depid": "11",
                "depnum": 20
            },
            {
                "depid": "15",
                "depnum": 23
            }
        ]
    }
    std::map<std::wstring, int> part_depid_num;
    
        //这里是吧json的数据直接写成了字符串的形式来完成
        QByteArray data = QByteArray("{"rootpath":"001","usernum":111,"childdep":[{"depid":"11","depnum":20},{"depid":"15","depnum":23}]}");
        //判断字符串转化为QJsonDocument  是否出现了错误
        QJsonParseError jsonError;//Qt5新类 
        QJsonDocument json = QJsonDocument::fromJson(data, &jsonError);//Qt5新类
        if (jsonError.error == QJsonParseError::NoError)
        {
            if (json.isObject())
            {
                QJsonObject rootObj = json.object();
                QString rootpath;
                int rootusernum;
                //是否含有key  rootpath
                if (rootObj.contains("rootpath"))
                {
                    //取出key为rootpath的值
                    QJsonValue value = rootObj.value("rootpath");
                    //判断是否是string类型
                    if (value.isString())
                    {
                        rootpath = value.toString();
                    }
                }
                if (rootObj.contains("usernum"))
                {
                    //取出key为usernum的值
                    QJsonValue value = rootObj.value("usernum");
                    //判断是否为double类型
                    if (value.isDouble())
                    {
                        rootusernum = value.toDouble();
                    }
                }
                part_depid_num[rootpath.toStdWString()] = rootusernum;
                if (rootObj.contains("childdep"))
                {
                    QJsonValue valueArray = rootObj.value("childdep");
                    //判断类型是否为array,并且将array遍历出来
                    if (valueArray.isArray())
                    {
                        QJsonArray jsonArray = valueArray.toArray();
                        for (int i = 0; i < jsonArray.count();i++)
                        {
                            QJsonValue childValue = jsonArray[i];
    
    
                            if (childValue.isObject())
                            {
                                QString child_depid;
                                QString child_usernum;
                                int child_usern;
                                QJsonObject  childObject = childValue.toObject();
                                if (childObject.contains("depid"))
                                {
                                    QJsonValue valueJson = childObject.value("depid");
                                    if (valueJson.isString())
                                    {
                                        child_depid = valueJson.toString();
                                    }
                                }
                                if (childObject.contains("depnum"))
                                {
                                    QJsonValue valueJson = childObject.value("depnum");
                                    if (valueJson.isDouble())
                                    {
                                        child_usern = valueJson.toDouble();
                                    }
                                }
                                if (child_usernum.isEmpty())
                                {
                                    part_depid_num[child_depid.toStdWString()] = child_usern;
                                }
                            }
                        }
                    }
                }
            }
        }
        //printf(QString::fromStdWString(part_depid_num.begin()->first).toStdString().c_str());
        std::map<std::wstring, int> ::iterator it;
        for (it = part_depid_num.begin(); it != part_depid_num.end();it++)
        {
            cout << QString::fromStdWString(it->first).toStdString().c_str()<<endl;
        }
  • 相关阅读:
    shell安装kettle
    shell安装jdk
    shell脚本之系统初始化设置(设置selinux、设置ulimit、设置firewalld、设置time_zone)
    关闭防火墙
    todo的使用
    Android Dagger2.0 学习一下
    Android零碎知识点
    windows7 服务中上找不到mysql
    AS 3.1 多library合并打包成aar的正确方式(fat-aar)
    Alexander的Python机器学习 之目录分析。
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14431807.html
Copyright © 2020-2023  润新知