前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >50.Qt-QJsonDocument读写json

50.Qt-QJsonDocument读写json

作者头像
诺谦
发布2019-11-26 16:45:20
1.6K0
发布2019-11-26 16:45:20
举报
文章被收录于专栏:Linux驱动Linux驱动
  • QJsonDocument: 提供一种读取和写入JSON文档的方法,可以通过它的的成员函数array()或object()检索文档中包含的数组或对象,然后读取JSON数据,或者修改数据。
  • QJsonObject: 封装了一个JSON对象, 可以使用它的成员函数size()、insert()和remove()来对修改JSON数据.
  • QJsonArray: 封装了一个JSON数组,用来实现JSON数组的

1.解析JSON-示例

注意:JSON中的Key命名不能相同,否则的话会覆盖掉,比如:

代码语言:javascript
复制
{
    "FLAG": 1,
    "FLAG": "example"
}

最终只能读取到FLAG的"example"值.

json文件示例内容如下:

代码语言:javascript
复制
{
    "FLAG": 1,
    "NAME": "example",
    "ARRAYS":
    [
        {
            "Name":       "array1",
            "String":     "哈哈哒1"
        },
        {
            "Name":       "array2",
            "String":     "哈哈哒2"
        },
        {
            "Name":       "array3",
            "String":     "哈哈哒3"
        },
        {
            "Name":       "array4",
            "String":     "哈哈哒4"
        }
    ]
}

程序如下:

代码语言:javascript
复制
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-示例

代码如下:

代码语言:javascript
复制
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();
}

文件保存如下:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档