You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
3.6 KiB

6 months ago
/******************************************************************
Copyright © Deng Zhimao Co., Ltd. 1990-2030. All rights reserved.
* @projectName weather
* @brief myjsonparse.cpp
* @author Deng Zhimao
* @email 1252699831@qq.com
* @date 2020-06-15
*******************************************************************/
#include "myjsonparse.h"
#include "weatherdata.h"
#include <QVariant>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
MyJsonParse::MyJsonParse()
: m_success(false)
{
}
MyJsonParse::MyJsonParse(const QJsonDocument &doc)
: m_success(false),
m_jsonDoc(doc)
{
}
MyJsonParse::~MyJsonParse()
{
}
void MyJsonParse::setJsonDocument(const QJsonDocument &doc)
{
if (!doc.isNull())
m_jsonDoc = doc;
if (m_jsonDoc.isObject()) {
QJsonObject object = m_jsonDoc.object();
m_success = object.value("desc").toString() == "OK";
}
}
QJsonDocument MyJsonParse::jsonDocument() const
{
return m_jsonDoc;
}
QString MyJsonParse::getCurrentCity() const
{
if (m_success){
QJsonObject object = m_jsonDoc.object();
object = object.value("data").toObject();
return object.value("city").toString();
}
return "获取城市失败";
}
QString MyJsonParse::getCurrentTemp() const
{
if (m_success){
QJsonObject object = m_jsonDoc.object();
object = object.value("data").toObject();
return object.value("wendu").toString();
}
return "获取当前温度失败";
}
QList<IndexData *> MyJsonParse::getIndexList() const
{
QList<IndexData *> indexs;
if (m_success) {
QJsonObject object = m_jsonDoc.object();
object = object.value("data").toObject();
IndexData *indexData = new IndexData;
indexData->setDescript(object.value("ganmao").toString());
indexs.push_back(indexData);
}
return indexs;
}
QList<WeatherData *> MyJsonParse::getWeatherList() const
{
QList<WeatherData *> weathers;
if (m_success){
QJsonObject object = m_jsonDoc.object();
object = object.value("data").toObject();
QJsonArray array = object.value("forecast").toArray();
for (auto it : array){
object = it.toObject();
WeatherData *weatherData = new WeatherData;
if (object.value("date").toString().length() == 6)
weatherData->setDate(object.value("date").toString().mid(3, 3));
else
weatherData->setDate(object.value("date").toString().mid(2, 3));
QString temperature = object.value("high").toString().mid(3, 2);
weatherData->setMaxTemperature(temperature.toInt());
temperature = object.value("low").toString().mid(3, 2);
weatherData->setMinTemperature(temperature.toInt());
QString weather = object.value("type").toString();
weatherData->setWeather(weather);
QString imagestr;
if (weather.left(1) == "")
imagestr = "fine";
else if ((weather.left(2) == "多云" ) || weather.left(1) == "")
imagestr = "cloudy";
else if (weather.contains(""))
imagestr = "rain";
else if (weather.contains(""))
imagestr = "snow";
else imagestr = "fine";
weatherData->setDayPicture("qrc:/weather/image/" + imagestr + "_sun.png");
weatherData->setNightPicture("qrc:/weather/image/" + imagestr + "_moon.png");
weatherData->setWind(object.value("fengxiang").toString());
weathers.push_back(weatherData);
}
}
return weathers;
}