Qt解析JSON文件

json是一种与语言无关的数据交换的格式,使用Json的格式与解析方便的可以表示一个对象信息,json有两种格式:①对象格式:{“key1”:obj,“key2”:obj,“key3”:obj…}、②数组/集合格式:[obj,obj,obj…]。

json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据格式,目前这种数据格式比较流行,逐渐替换掉了传统的xml数据格式。与json对象不同的是,json数据格式的属性名称和字符串值需要用双引号引起来,用单引号或者不用引号会导致读取数据错误。json的另外一个数据格式是数组,和javascript中的数组字面量相同。

一、四个主要的API

QJsonDocument
QJsonValue
QJsonObject
QJsonArray

二、使用JSON对数据序列化

//json数据序列化
/*
 {
    "name":"ace",
    "sex":"man",
    "age":22,
    "family":{
           "father":"huawei",
           "bother":["a","b","c"]
    }
}
*/
    QJsonObject obj;
    obj.insert("name","ace");
    obj.insert("sex","man");
    obj.insert("age",22);
    QJsonObject subobj;
    subobj.insert("father","huawei");
    QJsonArray arr;
    arr.append("a");
    arr.append("b");
    arr.append("c");
    subobj.insert("bother",arr);
    obj.insert("family",subobj);
	//把json对象转换成json文档
    QJsonDocument jsondoc(obj);
    //把json转换成字符串
    QByteArray json = jsondoc.toJson();

    QFile file("E:\\working_files\\Qt\\PUI\\ace.json");
    file.open(QIODevice::WriteOnly);
    file.write(json);
    qDebug()<<"success";

三、使用JSON对数据反序列化

        QByteArray byteArr = file.readAll();
        //解析json
        QJsonParseError err;
        //fromJson方法:将json解析为UTF-8编码的json文档
        QJsonDocument doc = QJsonDocument::fromJson(byteArr,&err);
        //object方法:返回文档中包含的QJsonObject对象;因为这个json文件是object类型的
        QJsonObject rootObj = doc.object();
        if(err.error!= QJsonParseError::NoError)
        {
            qDebug()<<"json格式错误";//注意:如果文档中有中文,就会报格式错误
        }else
        {
            //总的思路是:对象.value(),如果取到string、int、double类型 就直接.toString()等输出;
            //如果取到object或array类型 ,就通过toObject()或toArray() 转到对象或数组类型,接着取值。。循环


            qDebug()<<"parse start";
            //首先 取rootObj对象的ui值
            QJsonValue uiValue = rootObj.value("ui");
            //其次 ui的值是一个对象,需要转换到object或array类型
            QJsonObject uiValueObject = uiValue.toObject();
            。。。。。。
            QJsonValue widgetValue3 = single_widgetValue2Arrayobject.value("widget");
            QJsonArray widgetValue3Array = widgetValue3.toArray();

            for (int i = 0;i<widgetValue3Array.count();i++)
            {
                QJsonValue all = widgetValue3Array.at(i);
                QJsonObject all_object = all.toObject();
                。。。。。
            }
        }

你可能感兴趣的:(实习经历,json,qt,开发语言)