烟台C/C++语言培训班
烟台C/C++语言培训班
- 上课时段:见详情
- 教学点:1个
- 开班时间:随到随学
- 课程价格:请咨询
- 已关注:841
- 优惠价格:请咨询
- 咨询电话: 400-008-6280
烟台C/C++语言培训相关资料:
教你快速搞定Qt下的Json文件使用
JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。JSON 解析器和 JSON 库支持许多不同的编程语言,目前非常多的编程语言都支持JSON。接下来传智播客C/C++培训专家为大家介绍一下Qt下的Json的使用。
Json的两种结构
JSON有两种表示结构,对象和数组。
l 对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。
{
key1:value1,
key2:value2,
...
}
其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组。
l 数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码。
[
true,
123,
“hello,world”
]
数组中的元素值类型可以相同也可不同。
Json格式的文件在使用的时候是十分灵活的,其中数组和对象之间也是可以相互嵌套的,大家可以按照自己的实际需求来定义成对应的格式。例如:
[
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName": "Jones" }
]
Qt5中JSON的生成与解析
Qt5 新增加了处理 JSON 的类,与 XML 类库类似,均以 QJson 开头,在 QtCore 模块中,不需要额外引入其它模块。Qt5 新增加六个相关类:
需要大家着重掌握的类为前四个。
QJsonDocument
该Json文档类主要是把json格式的数据解析为Qt中的Json文档对象,所有我们在使用该类之前,需要先把数据准备好:
] 解析Json
1. 使用QFile对象加载指定的Json格式文件
a) QFile file(”D:\myjson.json”);
b) file.open(QIODevice::ReadWrite);
2. 通过QFile类中的read方法将文件数据读到内存
a) QByteArray json = file. readAll();
3. QJsonDocument::fromJson() 可以由 QByteArray 对象构造一QJsonDocument 对象,用于我们的读写操作
a) QJsonDocument jsDoc;
b) jsDoc = QJsonDocument::fromJson(json.toUtf8());
QJsonObject
] 生成json对象
因为json对象为键值对,所以我们可以使用QJsonObject类的insert方法,向该类对象中插入数据。
1. 创建空的QJsonObject对象
a) QJsonObject obj;
2. 使用insert方法向空对象中插入数据
a) obj.insert(“name”, “Jack”);
b) obj.insert(“age”, 26);
c) obj.insert(“isboy”, true);
] 解析json对象
1. 首先需要先得到一个QJsonDocument对象,然后判断该对象是否是一个json对象,使用isObject()方法
2. 使用QJsonDocument类的object()方法可以将json文档对象转换为Json对象。
3. 可以通过QJsonObject对象的key值得到其value值,访问方式为QJsonValue value = obj[key]
4. 使用QJsonValue类的成员方法将value值转换为实际的数据类型。
QJsonDocument parse_doucment;
parse_doucment = QJsonDocument::fromJson(byte_array);
if(parse_doucment.isObject())
{
QJsonObject obj = parse_doucment.object();
if(obj.contains("name"))
{
QJsonValue name_value = obj["name"];
if(name_value.isString())
{
QString name = name_value.toString();
}
}
QJsonArray
] 生成Json
1. 创建Json数组:
a) QJsonArray json;
2. 使用QJsonArray类的insert方法插入数据:
a) json.insert(0, QString("Qt"));
b) json.insert(1, QString("version"));
c) json.insert(2, true);
3. 创建Json文档对象:
a) QJsonDocument document;
4. 将初始化完成的json数组对象设置给Json文档对象
a) document.setArray(json);
5. 将json文档对象转换为QByteArray对象
a) QByteArray byte_array = document.toJson();
生成的文件格式:["Qt","version",true]
] 解析Json
1. 首先需要先得到一个QJsonDocument对象,然后判断该对象是否是一个json数组,使用isArray()方法。
2. 使用QJsonDocument类的array()方法可以将json文档对象转换为Json对象。
3. 可以通过QJsonArray对象遍历得到其中的每个value值,访问方式与遍历普通数组的方式相同。
4. 使用QJsonValue类的成员方法将value值转换为实际的数据类型。
QJsonDocument parse_doucment;
parse_doucment = QJsonDocument::fromJson(byte_array);
if(parse_doucment.isArray())
{
QJsonArray array = parse_doucment.array();
int size = array.size();
for(int i=0; i
{
QJsonValue value = array.at(i);
if(value.isString())
{
QString name = value.toString();
}
else if(value.isBool())
{
bool flag = value.toBool();
}
}
}
QJsonValue
在使用json对象或json数组对象得到对应的value之后,该value值并不是最终的数据类型而是一个QJsonValue类型的属性,我们必须通过该对象判断该类型的实际类型,然后在将其转换为对应的数据类型:
] 类型判断相关的成员方法:
n bool isArray() const // 是否为json数组
n bool isBool() const // 是否为布尔类型
n bool isDouble() const // 是否为浮点类型
n bool isNull() const // 是否为空
n bool isObject() const // 是否为json对象
n bool isString() const // 是否为字符串类型
] 数据类型转换相关成员方法:
n QJsonArray toArray(const QJsonArray &defaultValue) const
n QJsonArray toArray() const // 转为为json数组
n bool toBool(bool defaultValue = false) const // to布尔类型
n double toDouble(double defaultValue = 0) const
n int toInt(int defaultValue = 0) const
n QJsonObject toObject(const QJsonObject &defaultValue) const
n QJsonObject toObject() const // 转换为json对象
n QString toString(const QString &defaultValue = QString()) const
生成Json
1. 创建JsonObject对象或数组(再次以对象举例)
a) QJsonObject json;
2. 往json对象中添加键值对
a) json.insert("name", QString("Qt"));
b) json.insert("version", 5);
c) json.insert("windows", true);
3. 创建Json文档对象
a) QJsonDocument document;
4. 将Json对象或数组设置给json文档对象
a) document.setObject(json); // 数组:setArray(array)
5. 将文档对象转换为QByteArray类型的数据
a) QByteArray byte_array = document.toJson();
6. 将该数据通过QFile对象保存为磁盘文件。
最终格式:{"name": "Qt","version": 5,"windows": true}
C++ 开发语言,主导编程世界的地位
C语言属于高级语言,具有可移植性,面向过程的,贴近底层、运行速度快
1、应用广泛
C++ 语言广泛的用于基础软件、桌面系统、网络通信、音频视频、游戏娱乐等诸多领域,是世界上使用最广泛的编程语言之一
80%大型网络游戏 由C++编程语言开发 | 大部分基础软件是由 C++编程语言开发 | 90%以上桌面系统 都是由C++语言编写 | C/C++ 技术在网络通信 方面应用巨大 |
2、稳居前列
据世界权威语言排行榜(TIOBE)的最新数据显示(2019 年 3 月),C和C++ 语言已分别名列排行榜的第二和第四的位置。 |
C++ 软件人才稀缺,职业发展前景广
C++软件工程师在企业需求中呈上升趋势,人才需求发展处于坚挺状态
可从事行业:算法实现 网络安全 物联网 图形 / 视频 / 多媒体处理 底层数据处理 区块链 负载均衡 反向代理 |
19年迭代,课程源自企业需求,紧跟时代
达内每一期课程大纲,由研发组结合热点技术与企业需求不断完善
课程内容: • 计算机概述 • 标准 C 基础语法 • 数据结构和算法 学习目标 计算机概述,Linux Eclipse 开发环境搭建 基本数据类型,流程控制,数组 俄罗斯方块 各种存储结构优劣对比,排序算法优劣对比 | ||||
课程内容 • Linux 文件系统 • Linux 内存管理 • Linux 进程管理 • Linux 线程管理 • 网络通讯开发 学习目标 掌握文件的打开与关闭、文件的读写、系统与标准I/O 掌握子进程创建、进程间通讯、信号捕获和处理 掌握线程创建、线程同步技术 | ||||
课程内容 • C++ 基础 • OOP • 异常和 IO 流 • QT 开源框架库 • C++ 模板 • STL 标准模板库 • MySQL 学习目标 熟悉名字空间、各种数据类型的操作 熟练掌握C++ 各种异常情况处理,输入输出流操作 掌握QT 开源框架库的使用 了解C++ 泛化数据类型技术原理和实现 掌握STL 十大容器使用 | ||||
课程内容 • Windows 编程基础 • Windows 窗口 • Windows 线程管理 • MFC 框架总揽 • 视图架构 • MFC 序列化 • MFC 网络通讯 • ADO 接口 学习目标 掌握窗口的注册、窗口的创建、消息机制、资源的使用 了解MFC 的概述、程序启动机制、窗口创建机制 掌握文件操作、永久保存机制 掌握ADO 接口访问数据库技术 | ||||
课程内容 • 网络安全概述 • 网络协议栈 • 密钥 • 内核加固 • 网络诱骗 • 防火墙 • 垃圾邮件过滤 • 恶意代码检测 • 嗅探器 学习目标 网络安全开发编码原理和切入点的剖析 对称秘钥、公钥秘钥的原理解析 针对木马攻击程序的反响渗透和注入技术 防火墙技术工作原理解析 各种抓包工具工作原理 |
多领域项目实战,助你职位发展先人一步
项目落地+重构,助你不仅能编程-更精编程
阶段项目一 | 根据当天知识点,搭建或重构项目,深谙不同编程方式的区别,选择合适的实现方式。 |
HTTP服务器 WebServes Web服务器可以解析客户端发来HTTP协议,根据用户请求,给予响应数据(静态网页,图片或动态页面)。 | |
阶段项目二 | 根据当天知识点,搭建或重构项目,深谙不同编程方式的区别,选择合适的实现方式。 |
网络爬虫 WebCrawler 搜索引擎的信息源自互联网,通过“网络爬虫”将整个“互联网”的海量信息获取到本地.(搜索引擎的入口) | |
阶段项目三 | 根据当天知识点,搭建或重构项目,深谙不同编程方式的区别,选择合适的实现方式。 |
电信计费系统 DMS 电信部门针对电信用户登录信息进行采集,分析,传输,存储,以此作为对电信用户资费的依据。 | |
阶段项目四 | 根据当天知识点,搭建或重构项目,深谙不同编程方式的区别,选择合适的实现方式。 |
远程监控 Remote Control 取消远程机所有的输入控制功能,实现本地机监视并控制远程机的所有输入输出操作。 |
扫描二维码免费领取试听课程
登录51乐学网
注册51乐学网