50.Qt-QJsonDocument读写json

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

文件保存如下:

 

 

 

 

 

posted @ 2019-11-25 20:55  诺谦  阅读(14597)  评论(2编辑  收藏  举报