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字符解析和生成就是这样了,如果要更深入了解。可以转到构造函数,了解详细的接口。

上一篇:误卸载python2.4导致yum不能用后的修复


下一篇:Android开发之漫漫长途 番外篇——内存泄漏分析与解决