当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 50.Qt-QJsonDocument读写json

50.Qt-QJsonDocument读写json

2019年11月26日  | 移动技术网IT编程  | 我要评论

spyera,司马张良博客,micro sd卡

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

文件保存如下:

 

 

 

 

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网