欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Qt项目天气预报(4) - json 数据解析

Qt项目天气预报(4) - json 数据解析

2024/10/24 10:21:18 来源:https://blog.csdn.net/mx_jun/article/details/139727087  浏览:    关键词:Qt项目天气预报(4) - json 数据解析

  QT的json基本概念

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。JSON是基于JavaScript的一个子集,尽管它是独立于语言的,且有多种语言支持。JSON常用于网络应用程序中的数据传输,尤其是在Web应用程序中与后端服务器通信。

在Qt中生成JSON数据并将其保存到文件的一个基本示例涉及使用 QJsonDocument QJsonObject QJsonArray 类。以下是创建一个简单JSON对象并将其保存到文件的示例代码。

Qt 输出生成json文件

widget.cpp

#include "widget.h"
#include "ui_widget.h"#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QJsonObject rootObj;//配置简单的json数据:rootObj["cityid"] = "101050101";rootObj["date"] = "2024-06-16";rootObj["week"] = "星期日";rootObj["tmp"] = "255";//创建并实例化json数组QJsonArray jsonArray;jsonArray.append("data1");jsonArray.append("data2");jsonArray.append("data3");jsonArray.append(100);//将json组作为一组值对象,赋值给一个键rootObj["testArry"] = jsonArray;//QJsonObject 对象也能加入数组QJsonObject alarmObj;alarmObj["alarmType"] = "雪灾";alarmObj["alarmLeve"] = "黄色";alarmObj["alarmTitle"] = "哈尔滨雪灾险情,请注意安全";rootObj["alarm"] = alarmObj;//多层数组嵌套QJsonObject day0;day0["day"] = "星期一";day0["wea"] = "晴";day0["tem"] = 20;QJsonObject day1;day1["day"] = "星期二";day1["wea"] = "阴";day1["tem"] = 12;QJsonObject day2;day2["day"] = "星期三";day2["wea"] = "雨";day2["tem"] = 9;QJsonArray dayArray;dayArray.append(day0);dayArray.append(day1);dayArray.append(day2);rootObj["days"] = dayArray;// 通过QJsonDocument类把JSON类型的数据转为QByteArrayQJsonDocument jsonDoc(rootObj);QByteArray jsonArry =  jsonDoc.toJson();QFile file("F:/myqt/file_of_qt/test.json");file.open(QIODevice::WriteOnly);file.write(jsonArry); // 将QByteArray中的数据写入中文件file.close();}Widget::~Widget()
{delete ui;
}

效果演示

解析json数据

widget.cpp

#include "widget.h"
#include "ui_widget.h"#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>
#include <QJsonArray>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 读取JSON文件保存到QByteArray中QFile file("F:/myqt/file_of_qt/test.json");file.open(QIODevice::ReadOnly);QByteArray rawData = file.readAll(); // 将QByteArray中的数据写入中文件file.close();// 成绩单JsonObeject对象, 通过下标(键匹配)访问解析,解析出json文件数据QJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);if(!jsonDoc.isNull() && jsonDoc.isObject()){QJsonObject jsonRoot = jsonDoc.object();QString strW =jsonRoot["week"].toString();QString strT =jsonRoot["tmp"].toString();QString strDA =jsonRoot["date"].toString();QString strCT =jsonRoot["cityid"].toString();qDebug()<<strW;qDebug()<<strT; //这里tmp定义的数字是QString类型//qDebug()<<QString::number(strT); //qDebug() 默认输出QString类型需要转化qDebug()<<strCT;qDebug()<<strDA;// 解析QJsonArrayif(jsonRoot.contains("testArry") && jsonRoot["testArry"].isArray()){qDebug()<<"arry";QJsonArray testArry = jsonRoot["testArry"].toArray();for(QJsonValue val : testArry){// 根据类型进行转换switch (val.type()) {case QJsonValue::Double:qDebug()<<QString::number(val.toDouble());break;case QJsonValue::String:qDebug()<<val.toString();break;case QJsonValue::Object:break;}}}//解析QJsonObeject对象if(jsonRoot.contains("alarm") && jsonRoot["alarm"].isObject()){QJsonObject alarmObj = jsonRoot["alarm"].toObject();qDebug()<< alarmObj["alarmLeve"].toString();qDebug()<< alarmObj["alarmTitle"].toString();qDebug()<< alarmObj["alarmType"].toString();}//解析包含QJsonObject对象的 QJsonArrayif(jsonRoot.contains("days") && jsonRoot["days"].isArray()){QJsonArray dataArray = jsonRoot["days"].toArray();for(QJsonValue val:dataArray){//if(val.type() == QJsonValue::Object){if(val.isObject()){QJsonObject obj = val.toObject();qDebug()<<obj["day"].toString();qDebug()<<QString::number(obj["tem"].toDouble());qDebug()<<obj["wea"].toString();}}}}}Widget::~Widget()
{delete ui;
}

效果演示

如上图所有的json数据我们都已经解析出来了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com