code_production/app/HGPdtJsonTool/analysisjson.cpp

116 lines
3.2 KiB
C++

#include "analysisjson.h"
#include <QFile>
#include <QJsonObject>
#include <QJsonArray>
#include <QDir>
#include <QFileInfo>
#include <QDebug>
AnalysisJson::AnalysisJson(QString path)
{
if(QFile::exists(path)){
QFile file(path);
if(file.open(QIODevice::OpenModeFlag::ReadOnly))
{
m_json = QJsonDocument::fromJson(file.readAll());
file.close();
}
}
}
std::vector<AnalysisJson::json_node> AnalysisJson::GetNode()
{
std::vector<AnalysisJson::json_node> nodes;
if(!m_json.isObject())
return nodes;
auto obj = m_json.object();
auto keys = obj.keys().toVector();
std::sort(keys.begin(),keys.end(),[](QString x,QString y){
return x.toInt()<y.toInt();
});
for(auto key : keys)
{
if(key != "global")
nodes.push_back(json_node{ obj[key].toObject()["title"].toString(),
obj[key].toObject()["name"].toString(),
obj[key].toObject()["man"].toBool(),
obj[key].toObject()["desc"].toString(),
obj[key].toObject()["station"].toString(),
obj[key].toObject()["resolution"].toInt(),
obj[key].toObject()["dynamic-correct-data"].toString()
});
}
return nodes;
}
AnalysisJson::json_global AnalysisJson::GetGlobal()
{
if(!m_json.isObject())
return json_global();
auto obj = m_json.object()["global"].toObject();
return json_global{ obj["vid-to"].toInt(),
obj["pid-to"].toInt(),
obj["speed-mode"].toInt(),
obj["sleep-time"].toInt(),
obj["cpu-size"].toInt(),
obj["disk-size"].toInt(),
obj["lock-device"].toBool(),
obj["device-model"].toString(),
obj["firmware-version"].toString()
};
}
bool AnalysisJson::savejson(QString path, std::vector<AnalysisJson::json_node> json)
{
QFileInfo info(path);
if(!info.isFile())
return false;
if(!info.dir().exists())
QDir().mkdir(info.dir().path());
QJsonDocument doc;
QJsonObject obj;
int index =1;
for(auto json_ : json)
{
QJsonObject tmp_obj;
tmp_obj["title"] = json_.title;
tmp_obj["name"] = json_.name;
tmp_obj["man"] = json_.is_man;
tmp_obj["desc"] = json_.desc;
obj[QString::number(index++)] = tmp_obj;
}
doc.setObject(obj);
QFile file(path);
if(file.open(QIODevice::OpenModeFlag::WriteOnly))
{
file.write(doc.toJson());
file.close();
return true;
}
return false;
}
bool AnalysisJson::savejson(QString path, QJsonDocument doc)
{
QFileInfo info(path);
if(!info.isFile())
return false;
if(!info.dir().exists())
QDir().mkdir(info.dir().path());
QFile file(path);
if(file.open(QIODevice::OpenModeFlag::WriteOnly))
{
file.write(doc.toJson());
file.close();
return true;
}
return false;
}