Qt解析Json文件

参考文献:使用Qt读写JSON文件(二)——从文件解析JSON

代码实现如下:

#include<QDir>
#include<QFile>
#include<QJsonArray>
#include<QJsonDocument>
#include<QJsonObject>
#include<QJsonParseError>
#include<QJsonValue>
#include<QSysInfo>
#include<QTextStream>
#include<cstdlib>
#include<iostream>

using std::cout;

int main( int argc, char *argv[] ) {
    // Qt的一个宏,消除未使用变量的警告,无实际作用
    // 定义为,#define Q_UNUSED(x) (void)x
    Q_UNUSED( argc );
    Q_UNUSED( argv );

    // 默认打开的文件位置为用户桌面的test.txt文件。
    QFile file("data.json" );
    if (!file.open(QIODevice::ReadOnly)) {
        cout << "文件打开失败!\n";
        exit( 1 );
    }
    cout << "文件打开成功\n";

    QFile f("illuminanceReturn.txt");
    f.open( QIODevice::ReadWrite|QIODevice::Append);
    QTextStream out(&f);

    QJsonParseError jsonParserError;
    while(!file.atEnd())
    {
       QByteArray value=file.readLine();
       QJsonDocument  jsonDocument=QJsonDocument::fromJson(value,&jsonParserError);
       if(!jsonDocument.isNull()&&jsonParserError.error==QJsonParseError::NoError)
       {
          if(jsonDocument.isObject())
          {
            QJsonObject jsonObject = jsonDocument.object();
            if(jsonObject.contains("actioncode") &&jsonObject.value("actioncode")=="illuminanceReturn")
            {
                out<<"{\n";
                out<<" messageclass:sensorData,"<< "\n";
            }
            if(jsonObject.contains("postdata")&&jsonObject.value("postdata").isObject())
            {
                QJsonObject Object=jsonObject.value("postdata").toObject();
                if ( Object.contains("sensorDevID")&&
                     Object.contains("groupID")&&
                     Object.contains("illuminance")&&
                     Object.contains("voletage")&&
                     Object.contains("timestamp")&&
                     Object.value("sensorDevID").isString()&&
                     Object.value("groupID").isString()&&
                     Object.value("illuminance").isString()&&
                     Object.value("voletage").isDouble()&&
                     Object.value("timestamp").isString()
                   )
                {
                    out<<" deviceID:"<<Object.value("sensorDevID").toString()<<"\n";
                    out<<" typeID:"<<Object.value("groupID").toString()<<'\n';
                    out<<" illuminance:"<<Object.value("illuminance").toString()<<'\n';
                    out<<" voletage:"<<Object.value("voletage").toDouble()<<'\n';
                    out<<" timestamp:"<<Object.value("timestamp").toString()<<'\n';
                    out<<"}\n";
                    out<<'\n';
                }
             }
          }
       }
    }


    file.close();
    cout << "文件已解析并被保存\n";

    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值