QT开发之JSON数据读写

1、写JSON文件:

头文件:

#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>

 

    //fileName为路径


    if (!fileName.isNull())
    {
        // 以读写方式打开路径下文件,若该文件不存在则会自动创建
        QFile file(fileName);
        if(!file.open(QIODevice::ReadWrite))
        {
            qDebug() << "File open error";
        }
        else
        {
            qDebug() <<"File open!";
        }

        // 清空文件中的原有内容
        file.resize(0);


        QJsonObject jsonObject[7];
        for(int i = 0; i < 7; i++)
        {
            jsonObject[i].insert("name", QString::number(i+1));
            jsonObject[i].insert("age", i+18);
        }

        // 使用QJsonArray添加值,并写入文件
        QJsonArray jsonArray;

        QJsonObject jsonObject1;
        jsonObject1.insert("data0", QJsonValue(jsonObject[0]));
        jsonObject1.insert("data1", QJsonValue(jsonObject[1]));
        jsonObject1.insert("data2", QJsonValue(jsonObject[2]));
        jsonObject1.insert("data3", QJsonValue(jsonObject[3]));
        jsonObject1.insert("data4", QJsonValue(jsonObject[4]));
        jsonObject1.insert("data5", QJsonValue(jsonObject[5]));
        jsonObject1.insert("data6", QJsonValue(jsonObject[6]));
        jsonArray.append(QJsonValue(jsonObject1));


        //生成json数据
        QJsonDocument jsonDoc;
        //jsonDoc.setArray(jsonArray);//这个也可以
        jsonDoc.setObject(jsonObject1);

        file.write(jsonDoc.toJson());
        file.close();
    }

2、读JSON文件

//file_name为文件路径


if (!file_name.isNull())
{    
        QFile file(file_name);
        if(!file.open(QIODevice::ReadWrite))
        {
            qDebug() << "File open error";
            exit(1);
        }
        else
        {
            qDebug() <<"File open!";
        }


        //直接读取
        QJsonParseError jsonParserError;
        QJsonDocument   jsonDocument = QJsonDocument::fromJson( file.readAll(), &jsonParserError );

        if ( !jsonDocument.isNull() && jsonParserError.error == QJsonParseError::NoError )
        {
            if ( jsonDocument.isObject() )
            {
                QJsonObject jsonObject = jsonDocument.object();
                if ( jsonObject.contains( "postsNum" ) && jsonObject.value( "postsNum" ).isDouble() )
                {
                    qDebug() << "postsNum is " << jsonObject.value( "postsNum" ).toInt() << "\n";
                }
            }
        }

        //读取一个对象
        QByteArray data = file.readAll();      
        //使用json文件对象加载字符串
        QJsonDocument doc=QJsonDocument::fromJson(data);
        //判断是否对象
        if(doc.isObject())
        {
            //把json文档转换为json对象
            QJsonObject obj=doc.object();
            QJsonValue value=obj.value("Fileinfo");
            if(value.isObject())
            {
                QJsonObject subobj=value.toObject();
                //取值
                QString ip=subobj.value("app").toString();
                QString port=subobj.value("app_version").toString();
                qDebug()<<ip<<port;
            }
        }


        //读取数组多个对象
        QJsonParseError jsonParserError;
        QJsonDocument   jsonDocument = QJsonDocument::fromJson( file.readAll(), &jsonParserError );

        if ( !jsonDocument.isNull() && jsonParserError.error == QJsonParseError::NoError )
        {
            if ( jsonDocument.isObject() )
            {
                QJsonObject jsonObject = jsonDocument.object();
               

                if ( jsonObject.contains( "Fx" ) )
                {
                    QJsonArray jsonArray = jsonObject.value( "Fx" ).toArray();
                    for ( int i = 0; i < jsonArray.size(); i++ )
                    {
                        if ( jsonArray[ i ].isObject() )
                        {
                            QJsonObject jsonObjectPost = jsonArray[ i ].toObject();
                            if ( jsonObjectPost.contains( "count1" ) &&
                                 jsonObjectPost.contains( "count2" ) &&
                                 jsonObjectPost.contains( "count3" ) &&
                                 jsonObjectPost.value( "count1" ).isDouble() &&
                                 jsonObjectPost.value( "count2" ).isString() &&
                                 jsonObjectPost.value( "count3" ).isString() )
                            {
                                //读取
                                //jsonObjectPost.value( "count1" ).toInt();
                                //jsonObjectPost.value( "count2" ).toString().toStdString();
                                //jsonObjectPost.value( "count3" ).toString().toStdString();
                            }
                        }
                    }
                }
            }
        }





    file.close();
}
QString fileName = QFileDialog::getSaveFileName(this,
                                                    tr("Save"),
                                                    tr(""),
                                                    tr("*.json"));

QString file_name= QFileDialog::getOpenFileName(this,
                                                    tr("Open File"),
                                                    tr(""),
                                                    "Files(*.json)",
                                                    0);

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值