1 QT json字符串生成和解析
1.1 QT Json解析流程
(1) 字符串转化为QJsonDocument
QJsonParseError json_error;
QJsonDocument json_doc = QJsonDocument::fromJson(lpc_body.c_str(), &json_error);
if (json_error.error != QJsonParseError::NoError)
{
LOGIC_ERROR("parse json error %d", json_error.error);
return false;
(2)QJsonDocument转化为QJsonObject
QJsonObject json_object = json_doc.object();
(3)通过QJsonObject的函数来获取值
QJsonObject json_object = json_doc.object();
if (!json_object.contains("data"))
{
LOGIC_INFO("Recv server subscribeEvent return data %s", data.lpc_body.c_str());
return true;
}
QJsonObject Qdata= json_object["data"].toObject();
if (!Qdata.contains("message"))
{
LOGIC_ERROR("json_object can't find Message ");
return false;
}
QJsonObject Message = Qdata["message"].toObject();
// 接下来是data字段
if (!Message.contains("EventData"))
{
LOGIC_ERROR("can't find EventData ");
return false;
}
QJsonObject EventData = Message["EventData"].toObject();
if (!EventData.contains("alarmMessage"))
{
LOGIC_ERROR("can't find alarmMessage ");
return false;
}
QJsonObject alarmmsg = EventData["alarmMessage"].toObject();
alarmData.strAlarmName = alarmmsg["objectiveName"].toString().toStdString();
alarmData.strSTime = alarmmsg["alarmTime"].toString();
alarmData.strEventID = alarmmsg["eventId"].toString().toStdString();
alarmData.strAlarmLevel = alarmmsg["eventLevel"].toString().toStdString();
alarmData.strEventType = alarmmsg["eventType"].toString().toStdString();
alarmData.strAlarmLogID = alarmmsg["id"].toString().toStdString();
LOGIC_INFO("Parase alarm success !");
1.2 QT Json构造流程
构造流程与解析流程相反
(1)创建一个QJsonObject对象,然后通过insert函数插入各种类型的值。
iterator insert(const QString &key, const QJsonValue &value);
其中QJsonValue是一个带有多种构造函数的类,可以输入多种数据类型.可以通过各种函数判断和转换为对应的数据类型。
//构造函数
QJsonValue(Type = Null);
QJsonValue(bool b);
QJsonValue(double n);
QJsonValue(int n);
QJsonValue(qint64 n);
QJsonValue(const QString &s);
QJsonValue(QLatin1String s);
//类型判断函数
Type type() const;
inline bool isNull() const { return type() == Null; }
inline bool isBool() const { return type() == Bool; }
inline bool isDouble() const { return type() == Double; }
inline bool isString() const { return type() == String; }
inline bool isArray() const { return type() == Array; }
inline bool isObject() const { return type() == Object; }
inline bool isUndefined() const { return type() == Undefined; }
//转换输出函数
bool toBool(bool defaultValue = false) const;
int toInt(int defaultValue = 0) const;
double toDouble(double defaultValue = 0) const;
QString toString() const;
QString toString(const QString &defaultValue) const;
QJsonArray toArray() const;
QJsonArray toArray(const QJsonArray &defaultValue) const;
QJsonObject toObject() const;
QJsonObject toObject(const QJsonObject &defaultValue) const;
QJsonObject json_object;
json_object.insert("errorCode", 1);//数字
json_object.insert("errorModule", “error_module”);//字符串
json_object.insert("bool", true);
// 可以直接将map中对应的数据转换为json字符串
if (!key_value.empty())
{
json_object.insert("data", QJsonObject::fromVariantMap(key_value));
}
(2)组织好结构之后,用QJsonDocument的setObject函数设置对象
QJsonDocument json_doc;
json_doc.setObject(json_object);
(3)用QJsonDocument的tojson函数转化为字符串
string str= json_doc.toJson(QJsonDocument::Compact);
Qjson字符解析和生成就是这样了,如果要更深入了解。可以转到构造函数,了解详细的接口。
自己编了一个股票监控软件,有如下功能,有兴趣的朋友可以下载;
(1) 个股监测。监测个股实时变化,可以监测个股大单交易、急速拉升和下降、主力入场和出场、股票最高点和最低点提醒。检测到最高点、最低点、主力进场点、主力退场点、急速拉升点、急速下跌点,给出语音或者声音提醒,不用再时刻看着大盘了,给你更多自由的时间;
(2) 大盘监测。监测大盘的走势,采用上证、深证、创业三大指数的综合指数作为大盘走势。并实时监测大盘的最高点和最低点、中间的转折点。
(3) 股票推荐。还能根据历史数据长期或短期走势进行分析,对股市3千多个股票进行分析对比,选出涨势良好的股票,按照增长速度从大到小排序,推荐给你涨势良好的股票;
下载地址:
1.0.3版本(修复大盘指数崩溃缺陷)下载地址:
链接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取码:003h
更新链接:
https://www.cnblogs.com/bclshuai/p/10621613.html