zoukankan      html  css  js  c++  java
  • 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();
    }

    文件保存如下:

     

     

     

  • 相关阅读:
    NOsql总结
    关于Swift中的指针的那些事
    并发控制的概念
    并发控制--Concurrency control--乐观、悲观及方法
    数据库的三大系统
    数据库沉思录
    代码结构化(分层)阅读
    代码阅读困难的原因
    数据库锁与并发
    SQLite事务、错误与自动回滚
  • 原文地址:https://www.cnblogs.com/lifexy/p/11930436.html
Copyright © 2011-2022 走看看