QT json字符串生成和解析

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;

 

2QJsonDocument转化为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)组织好结构之后,用QJsonDocumentsetObject函数设置对象

    QJsonDocument json_doc;

    json_doc.setObject(json_object);

3)用QJsonDocumenttojson函数转化为字符串

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

转载于:https://www.cnblogs.com/bclshuai/p/9077155.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值