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();
。。。。。
}
}