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

QT json字符串生成和解析的更多相关文章

  1. c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具

    c#实例化继承类,必须对被继承类的程序集做引用   0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...

  2. java中json数据生成和解析(复杂对象演示)

    1.json简单介绍 1.1 json是最流行和广泛通用的数据传输格式,简称JavaScript Object Notation,最早在JavaScript中使用. 1.2 举个例子,下面是一个jso ...

  3. Json的生成和解析

    json是常见的数据格式,生成和解析是常用的操作.Android中,默认提供orgJson供我们使用,除此之外,google也提供了Gson库方便我们开发. Json样例类 package com.f ...

  4. JSON字符串 拼接与解析

    常用方式: json字符串拼接(目前使用过两种方式): 1.运用StringBuilder拼接 StringBuilder json = new StringBuilder(); json.appen ...

  5. java json 的生成和解析 --json-lib

    类(java json的解析和生成): import java.util.HashMap; import java.util.Map; import net.sf.json.JSONArray; im ...

  6. 后台给前台传JSON字符串,前台解析并拼接显示

    后台传JSON public class CourseType : IHttpHandler { Epoint.PeiXun.Bizlogic.BLL.CourseLibrary.PX_CourseT ...

  7. 前台给后台传JSON字符串,后台解析并保存

    前台 function BMSure() { var DanWeiName = $("[id$='BusinessName']").val(); var Address = $(& ...

  8. 由json字符串生成C#实体类的工具

    json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但在服务器端编程过程中,我们常常希望能通过智能提示来提高编码效率.JSON C# Class Generator 能将json格式所表示的J ...

  9. JSON C# Class Generator ---由json字符串生成C#实体类的工具(转)

    转载地址:http://www.cnblogs.com/finesite/archive/2011/07/31/2122984.html json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但 ...

随机推荐

  1. 标准库 svc—程序及服务控制

    对于程序及服务的控制,本质上而言就是正确的启动,并可控的停止或退出.在go语言中,其实就是程序安全退出.服务控制两个方面.核心在于系统信号获取.Go Concurrency Patterns.以及基本 ...

  2. c++ linux下输出中文

    同样,使用的是VS FOR LINUX进行测试. converting to execution character set: Invalid or incomplete multibyte or w ...

  3. Lyft高管的技术团队管理实战

    Lyft 的技术总监沈思维分享了他对于管理技术团队和打造工程文化的经验,也欢迎添加他的微信公众号"人家的屋顶"了解更多(微信公众号ID: othersroof).沈思维毕业于密歇根 ...

  4. Python 操作 mysql数据库的一个小小的基础案例,小白新手,以备后用~~

    model.py 中的代码 # Create your models here. # 书和作者一对多 class Author(models.Model): name = models.CharFie ...

  5. 15:element/Vue Admin

    1.1 简介 1.Vue Admin 简介 1. Vue Admin 是一个基于 Vue 2.0 & Bulma 0.3 的后台管理面板(管理系统),相当于是 Vue 版本的 Bootstra ...

  6. Fedora 全局代理上网设置

    1.首先新建一个bash文件 vim /etc/profile.d/proxy.sh 加入以下内容 (有账号密码) export HTTP_PROXY="http://username:pa ...

  7. 20145308 《网络对抗》 MSF基础应用 学习总结

    20145308 <网络对抗> MSF基础应用 学习总结 实验内容 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路.具体需要完成(1)一个主动攻击,如ms08_067 ...

  8. 写了个脚本将json换成md

    用python 脚本将protocol.json中的json按照templete.md模版生成,结果在protocol.md中 Python: #!/usr/bin/python # -*- codi ...

  9. topcoder srm 500 div1

    problem1 link 如果decisions的大小为0,那么每一轮都是$N$个人.答案为0. 否则,如果答案不为0,那么概率最大的一定是一开始票数最多的人.因为这个人每一轮都在可以留下来的人群中 ...

  10. topcoder srm 360 div1

    problem1 link (1)$n \neq m$时,假设$n<m$,那么同一行中的$m$个数字必定都相等. (2)$n=m$时,要满足任意的$i_{1},i_{2},j_{1},j_{2} ...