- qjsondocument: 提供一种读取和写入json文档的方法,可以通过它的的成员函数array()或object()检索文档中包含的数组或对象,然后读取json数据,或者修改数据。
- qjsonobject: 封装了一个json对象, 可以使用它的成员函数size()、insert()和remove()来对修改json数据.
- qjsonarray: 封装了一个json数组,用来实现json数组的
1.解析json-示例
注意:json中的key命名不能相同,否则的话会覆盖掉,比如:
{ "flag": 1, "flag": "example" }
最终只能读取到flag的”example”值.
json文件示例内容如下:
{ "flag": 1, "name": "example", "arrays": [ { "name": "array1", "string": "哈哈哒1" }, { "name": "array2", "string": "哈哈哒2" }, { "name": "array3", "string": "哈哈哒3" }, { "name": "array4", "string": "哈哈哒4" } ] }
程序如下:
bool parsejson() { //打开文件 qfile file(qapplication::applicationdirpath()+"/1.json"); if(!file.open(qiodevice::readonly)) { qdebug() << "file open failed!"; } else { qdebug() <<"file open successfully!"; } qjsonparseerror *error=new qjsonparseerror; qjsondocument jdc=qjsondocument::fromjson(file.readall(),error); //判断文件是否完整 if(error->error!=qjsonparseerror::noerror) { qdebug()<<"parsejson:"<<error->errorstring(); return false; } qjsonobject obj = jdc.object(); //获取对象 qdebug() <<"object size:"<<obj.size(); qstringlist list = obj.keys(); foreach (qstring key, list) { if(obj[key].isstring()) { qdebug()<<"key:"<<key<<"value:"<<obj[key].tostring(); } else if(obj[key].isarray() && key =="arrays") { qjsonarray arr = obj[key].toarray(); for(int i=0;i<arr.count();i++) { qjsonobject arrobj= arr[i].toobject(); qdebug()<<"key:"name""<<"value:"<<arrobj["name"].tostring(); qdebug()<<"key:"string""<<"value:"<<arrobj["string"].tostring(); } } } return true; }
打印如下:
写json-示例
代码如下:
bool writejson() { //打开文件 qfile file(qapplication::applicationdirpath()+"/1.json"); if(!file.open(qiodevice::writeonly)) { qdebug() << "file open failed!"; } else { qdebug() <<"file open successfully!"; } qjsondocument jdoc; qjsonobject obj; qjsonarray arr; for(int i=1;i<5;i++) { qjsonobject member; //定义数组成员 member["name"] = qstring("array%1").arg(i); member["string"] = qstring("哈哈哒%1").arg(i); arr.append(member); } obj["arrays"] = arr; obj["name"] ="example"; obj["flag"] ="1"; jdoc.setobject(obj); file.write(jdoc.tojson(qjsondocument::indented)); //indented:表示自动添加/n回车符 file.close(); }
文件保存如下:
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/600854.html