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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM