欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

50.Qt-QJsonDocument读写json

程序员文章站 2022-06-22 10:30:19
QJsonDocument: 提供一种读取和写入JSON文档的方法,可以通过它的的成员函数array()或object()检索文档中包含的数组或对象,然后读取JSON数据,或者修改数据。 QJsonObject: 封装了一个JSON对象, 可以使用它的成员函数size()、insert()和remo ......
  • 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;
}

打印如下:

 50.Qt-QJsonDocument读写json

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

文件保存如下:

 50.Qt-QJsonDocument读写json