Qt解析json文件详解(项目实用)

Qt5中提供了很方便的用于解析Json数据的类,主要包括QJsonValue,QJsonArray,QJsonObject,QJsonDocument等。使用这几个类能够很轻易在C++端创建和处理Json格式的数据,或对Json数据进行序列化及反序列化等。

QJsonValue类是用于保存所有类型的Json数据,它将Json数据归为下列6种基本类型:

bool QJsonValue::Bool
double QJsonValue::Double
string QJsonValue::String
array QJsonValue::Array
object QJsonValue::Object
null QJsonValue::Null

通过参数设置Json文件的路径然后通过调用接口进行数据解析:
void Utils::initCourseWareInfos(const QString &path)
{
    QString val;
    QFile file;
    file.setFileName(path);
    //打开json文件
    if (!(file.open(QIODevice::ReadOnly | QIODevice::Text))) return;
    val = file.readAll();
    file.close();
    m_courseWareInfos.clear();

    QJsonParseError error;
    QJsonDocument message = QJsonDocument::fromJson(val.toUtf8(), &error);
    if (error.error || !message.isObject()) {
        return;
    }

    QJsonObject sett2 = message.object();
    QJsonValue value = sett2.value(QString("courseWareData"));//根据文件内容节点进行一层一层解析
    QJsonObject item = value.toObject();
    QJsonValue gradeInfo = item.value(QString("gradeInfo"));
    QJsonArray gradeArray = gradeInfo.toArray();//获取某个节点下数组内容

    for (int i = 0; i < gradeArray.count(); ++i){
        CourseWareInfos cwInfos;
        QJsonObject tempobj = gradeArray[i].toObject();
        cwInfos.name = tempobj.value("name").toString();//拿到某一个具体属性的值并初始化相关业务的数据结构
        cwInfos.index = tempobj.value("index").toInt();
        QJsonArray tempArray = tempobj.value("data").toArray();
        for (int j = 0; j < tempArray.count(); ++j){
            QJsonObject temp = tempArray[j].toObject();
            LectureData ltdata;
            ltdata.id = temp.value("id").toInt();
            ltdata.lectureName = temp.value("name").toString();

            QJsonArray paragraphArray = temp.value("lecture").toArray();
            for (int k = 0; k < paragraphArray.count(); ++k){
                ParagraphInfos pginfo;
                QJsonObject ptemp = paragraphArray[k].toObject();
                pginfo.index = ptemp.value("index").toInt();
                pginfo.AudioUrl = ptemp.value("AudioUrl").toString();
                pginfo.ContentUrl = ptemp.value("ContentUrl").toString();
                ltdata.paragraphInfos.append(pginfo);
            }

            cwInfos.lectureData.append(ltdata);
        }
        m_courseWareInfos.append(cwInfos);//存储所有解析好的json文件中的内容
    }
}

猜你喜欢

转载自blog.csdn.net/xiaomucgwlmx/article/details/82496662
今日推荐