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;
(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字符解析和生成就是这样了,如果要更深入了解。可以转到构造函数,了解详细的接口。
QT json字符串生成和解析的更多相关文章
- 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 ...
- java中json数据生成和解析(复杂对象演示)
1.json简单介绍 1.1 json是最流行和广泛通用的数据传输格式,简称JavaScript Object Notation,最早在JavaScript中使用. 1.2 举个例子,下面是一个jso ...
- Json的生成和解析
json是常见的数据格式,生成和解析是常用的操作.Android中,默认提供orgJson供我们使用,除此之外,google也提供了Gson库方便我们开发. Json样例类 package com.f ...
- JSON字符串 拼接与解析
常用方式: json字符串拼接(目前使用过两种方式): 1.运用StringBuilder拼接 StringBuilder json = new StringBuilder(); json.appen ...
- java json 的生成和解析 --json-lib
类(java json的解析和生成): import java.util.HashMap; import java.util.Map; import net.sf.json.JSONArray; im ...
- 后台给前台传JSON字符串,前台解析并拼接显示
后台传JSON public class CourseType : IHttpHandler { Epoint.PeiXun.Bizlogic.BLL.CourseLibrary.PX_CourseT ...
- 前台给后台传JSON字符串,后台解析并保存
前台 function BMSure() { var DanWeiName = $("[id$='BusinessName']").val(); var Address = $(& ...
- 由json字符串生成C#实体类的工具
json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但在服务器端编程过程中,我们常常希望能通过智能提示来提高编码效率.JSON C# Class Generator 能将json格式所表示的J ...
- JSON C# Class Generator ---由json字符串生成C#实体类的工具(转)
转载地址:http://www.cnblogs.com/finesite/archive/2011/07/31/2122984.html json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但 ...
随机推荐
- php 获取淘宝搜索词 内容
$s = file_get_contents('http://suggest.taobao.com/sug?extras=1&code=utf-8&callback=g_ks_sugg ...
- VMware无法读取USB文件
今天碰到虚拟机内的Mac OS无法读取USB,经过一番查看,是Windows的服务里面的vmware usb arbitration service服务没有启动,再点击启动的时候,报错,提示本地文件找 ...
- 12: xlrd 处理Excel文件
1.1 xlrd处理.xlsx 文件 1.xlrd常用方法 #!/usr/bin/python # coding:utf-8 # 用xlrd读取Excel文件基本用法 import sys impor ...
- 20145221高其_Web安全基础实践
20145221高其_Web安全基础实践 目录 实践目标 WebGoat BurpSuite Injection Flaws Cross-Site Scripting (XSS) 总结 实践目标 (1 ...
- Docker 入门指南——资源工具篇
好工具 dive wagoodman/dive A tool for exploring each layer in a docker image 参考 用 Dive 看 Docker Image 裡 ...
- 作为非计算机专业的学生,觉得 C 语言远比其他语言易于上手,正常吗?
作者:invalid s链接:https://www.zhihu.com/question/26659552/answer/615531516来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...
- 【做题】cf603E——线段树分治
首先感谢题解小哥,他在标算外又总结了三种做法. 此处仅提及最后一种做法. 首先考虑题目中要求的所有结点度数为奇数的限制. 对于每一个联通块,因为所有结点总度数是偶数,所以总结点数也必须是偶数的.即所有 ...
- Linux/shell: remove adjacent similar patterns
cat > temp004AA1abcAA2AA3abcAA4abcAA5AA6 awk 'BEGIN {pre=0; str="";} { if(NR==1){ i ...
- Unity3D学习笔记(三十一):Xlua(1)
Xlua:腾讯研发,开源免费 配置:文件解压,拷贝到Unity项目里 注意:Xlua文件夹不许移动,不许重命名 运行Xlua: 1.引用命名空间 2.创建虚拟机 3.运行lua语句 4.不需要 ...
- redis事务之watch
三.redis事务之watch 首先要了解redis事务中watch的作用,watch命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行.监控一直持续到exec命令(事务 ...