Qt简单的解析Json数据例子(一)
要解析的json的格式为:
{
"rootpath": "001",
"usernum": 111,
"childdep": [
{
"depid": "11",
"depnum": 20
},
{
"depid": "15",
"depnum": 23
}
]
}
std::map<std::wstring, int> part_depid_num;
//这里是吧json的数据直接写成了字符串的形式来完成
QByteArray data = QByteArray("{\"rootpath\":\"001\",\"usernum\":111,\"childdep\":[{\"depid\":\"11\",\"depnum\":20},{\"depid\":\"15\",\"depnum\":23}]}");
//判断字符串转化为QJsonDocument 是否出现了错误
QJsonParseError jsonError;//Qt5新类
QJsonDocument json = QJsonDocument::fromJson(data, &jsonError);//Qt5新类
if (jsonError.error == QJsonParseError::NoError)
{
if (json.isObject())
{
QJsonObject rootObj = json.object();
QString rootpath;
int rootusernum;
//是否含有key rootpath
if (rootObj.contains("rootpath"))
{
//取出key为rootpath的值
QJsonValue value = rootObj.value("rootpath");
//判断是否是string类型
if (value.isString())
{
rootpath = value.toString();
}
}
if (rootObj.contains("usernum"))
{
//取出key为usernum的值
QJsonValue value = rootObj.value("usernum");
//判断是否为double类型
if (value.isDouble())
{
rootusernum = value.toDouble();
}
}
part_depid_num[rootpath.toStdWString()] = rootusernum;
if (rootObj.contains("childdep"))
{
QJsonValue valueArray = rootObj.value("childdep");
//判断类型是否为array,并且将array遍历出来
if (valueArray.isArray())
{
QJsonArray jsonArray = valueArray.toArray();
for (int i = 0; i < jsonArray.count();i++)
{
QJsonValue childValue = jsonArray[i];
if (childValue.isObject())
{
QString child_depid;
QString child_usernum;
int child_usern;
QJsonObject childObject = childValue.toObject();
if (childObject.contains("depid"))
{
QJsonValue valueJson = childObject.value("depid");
if (valueJson.isString())
{
child_depid = valueJson.toString();
}
}
if (childObject.contains("depnum"))
{
QJsonValue valueJson = childObject.value("depnum");
if (valueJson.isDouble())
{
child_usern = valueJson.toDouble();
}
}
if (child_usernum.isEmpty())
{
part_depid_num[child_depid.toStdWString()] = child_usern;
}
}
}
}
}
}
}
//printf(QString::fromStdWString(part_depid_num.begin()->first).toStdString().c_str());
std::map<std::wstring, int> ::iterator it;
for (it = part_depid_num.begin(); it != part_depid_num.end();it++)
{
cout << QString::fromStdWString(it->first).toStdString().c_str()<<endl;
}
Qt简单的解析Json数据例子(一)的更多相关文章
- Qt解析Json数据
1 JSON数据简介 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范) ...
- Qt QJson解析json数据
Qt QJson解析json数据 //加载根目录文件 void TeslaManageData::loadRootFolderFiles() { QNetworkAccessManager *mana ...
- 通过Gson解析Json数据
Json是一种数据格式,便于数据传输.存储.交换:Gson是一种组件库,可以把java对象数据转换成json数据格式. gson.jar的下载地址:http://search.maven.org/#s ...
- Java创建和解析Json数据方法(五)——Google Gson包的使用
(五)Google Gson包的使用 1.简介 Gson包中,使用最多的是Gson类的toJson()和fromJson()方法: ①toJson():将java对象转化为json数据 ...
- Java创建和解析Json数据方法(四)——json-lib包的使用
(四)json-lib包的使用 既然json-lib包比org.json包重量级,那么json-lib包肯定有很多org.json包没有的类和方法,这篇笔记简单记录json-lib包中 ...
- Java创建和解析Json数据方法(二)——org.json包的使用
(二)org.json包的使用 1.简介 工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookie ...
- Java创建和解析Json数据方法——org.json包的使用(转)
org.json包的使用 1.简介 工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookies, ...
- [系列] Go 如何解析 JSON 数据?
概述 最近掉进需求坑了,刚爬上来,评估排期出现了严重问题,下面三张图很符合当时的心境. 谈需求 估排期 开始干 为啥会这样,我简单总结了下: 与第三方对接. 跨团队对接. 首次用 Go 做项目. 业务 ...
- 使用Python解析JSON数据的基本方法
这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下: ----------------------------------- ...
随机推荐
- Java基础00-Stream流34
1. Stream流 Stream流 1.1 体验Stream流 代码示例: //需求:按照下面的要求完成集合的创建和遍历 public class StreamDemo { public stati ...
- [刘阳Java]_SpringMVC与Struts2的对比_第12讲
今日来具体给讲讲SpringMVC与Struts2的对比,这样方便朋友们在工作中或者是面试学习中对这两者的区别有个更好的了解 把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的 ...
- Python 机器学习实战 —— 无监督学习(上)
前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用.无监督学习顾 ...
- LCT(Link-Cut-Tree)
LCT(Link-Cut-Tree) LCT维护一个森林,即把每个节点用splay维护,可以进行许多操作: 查询.修改链上的信息 随意指定原树的根(即换根) 动态连边.删边 合并两棵树.分离一棵树 动 ...
- 关于GPIO口的一些概念性问题
一.什么是GPIO? GPIO的英文全称是General-Purpose IO ports,也就是通用输入输出口. 在嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CP ...
- Vmware 虚拟机网络通讯
VMware Workstation(中文名"威睿工作站")是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发.测试 .部署新的应用程序 ...
- 最高级的AutoHotkey重试源代码结构20191221.docx
;; 最高级的AutoHotkey重试源代码结构20191221.docx;; 在编写AutoHotkey脚本时经常要用到重试,; 单击控件无效时需要重新再单击,; 发送模拟按键无效时需要重新发送.; ...
- CVPR2021 | Transformer用于End-to-End视频实例分割
论文:End-to-End Video Instance Segmentation with Transformers 获取:在CV技术指南后台回复关键字"0005"获取该论文 ...
- 自学linux——10.Linux的网络知识
linux的网络知识 一.网络相关概述 1.网络的分类 局域网(LAN):在几百米到十几公里内办公楼群或校园内的计算机相互连接所构成的计算机网络 城域网(MAN):覆盖相距不远的几栋办公楼,也可以覆盖 ...
- [TensorFow2.0]-MNIST手写数字识别
本人人工智能初学者,现在在学习TensorFlow2.0,对一些学习内容做一下笔记.笔记中,有些内容理解可能较为肤浅.有偏差等,各位在阅读时如有发现问题,请评论或者邮箱(右侧边栏有邮箱地址)提醒. 若 ...