[QT编程系列-35]:数据存储 - JSON格式配置数据的存储与通知
目录
1. QJsonObject
2 QJsonDocument
3 JSON本文格式
4. JSON示例
5. JASON配置文件示例
1. QJsonObject
QJsonObject 是Qt的类之一,用于表示 JSON 对象。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于在不同系统之间传输和存储数据。
使用 QJsonObject,你可以创建、操作和访问 JSON 对象中的键值对数据。下面是一些常见的 QJsonObject 操作:
-
创建一个空的 JSON 对象:
QJsonObject obj; -
添加键值对数据到 JSON 对象:
obj["name"] = "John"; obj["age"] = 30; obj["email"] = "john@example.com"; -
从 JSON 对象中获取键值对数据:
QString name = obj["name"].toString(); int age = obj["age"].toInt(); QString email = obj["email"].toString(); -
检查 JSON 对象中是否包含特定的键:
if (obj.contains("email")) {// JSON 对象包含键 "email" } -
从 JSON 对象中移除特定的键值对数据:
obj.remove("age"); -
将 JSON 对象转换为 JSON 字符串:
QJsonDocument doc(obj); QString jsonString = doc.toJson(QJsonDocument::Compact);
QJsonObject 还支持嵌套使用,即一个 JSON 对象中可以包含另一个 JSON 对象。你可以根据需要进行深度层级的嵌套。
使用 QJsonObject,你可以方便地创建、操作和访问 JSON 数据。这对于与 Web 服务交互、保存和读取配置文件等情景非常有用。记得在使用时先包含 QJsonObject 头文件 (#include <QJsonObject>)。
2 QJsonDocument
QJsonDocument 是Qt的一个类,用于表示和操作 JSON 文档。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于在不同系统之间传输和存储数据。
QJsonDocument 提供了将 JSON 数据解析成树状结构、从树状结构中生成 JSON 数据以及进行其他操作的方法。以下是一些常见的 QJsonDocument 操作:
-
将 JSON 字符串解析为 QJsonDocument:
QString jsonString = "{\"name\": \"John\", \"age\": 30}"; QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8()); -
将 QJsonDocument 转换为 JSON 字符串:
QString jsonString = doc.toJson(QJsonDocument::Compact);这里的
Compact参数表示将生成的 JSON 字符串压缩为紧凑的形式,也可以选择Indented参数来添加缩进和换行,使其更易读。 -
获取 QJsonDocument 的根对象 QJsonObject:
QJsonObject obj = doc.object(); -
创建一个空的 QJsonDocument:
QJsonDocument doc; -
将 QJsonDocument 转换为二进制数据进行存储或发送:
QByteArray jsonData = doc.toBinaryData(); -
从二进制数据中解析 QJsonDocument:
QJsonDocument doc = QJsonDocument::fromBinaryData(jsonData);
QJsonDocument 还提供了其他一些有用的方法,例如设置和获取文档的元数据,合并多个 JSON 文档等。
使用 QJsonDocument,你可以方便地解析、生成和操作 JSON 数据。这对于与 Web 服务交互、处理配置文件或进行数据交换等情景非常有用。记得在使用时先包含 QJsonDocument 头文件 (#include <QJsonDocument>)。
3 JSON本文格式
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有简洁、易读和易解析的特点。它通常被用于在不同系统之间传输和存储数据。
JSON 文本由键值对构成,使用大括号 {} 表示对象(Object),每个键值对之间使用逗号 , 分隔。键值对由键(Key)和值(Value)组成,使用冒号 : 分隔。
以下是使用 JSON 文本的基本语法规则:
-
对象(Object):
- 使用大括号
{}包围。 - 键值对之间使用逗号
,分隔。 - 键(Key)必须是一个字符串(String)。
- 值(Value)可以是字符串、数值、布尔值、对象、数组或 null。
{"name": "John","age": 30,"hasPets": true,"address": {"street": "123 Main St","city": "New York"},"favoriteFruits": ["apple", "banana", "orange"] } - 使用大括号
-
数组(Array):
- 使用方括号
[]包围。 - 数组中的元素之间使用逗号
,分隔。 - 元素可以是字符串、数值、布尔值、对象、数组或 null。
["apple", "banana", "orange"] - 使用方括号
-
字符串(String):
- 使用双引号
"包围。 - 可以包含任意 Unicode 字符。
"Hello, World!" - 使用双引号
-
数值(Number):
- 可以是整数或浮点数。
42 3.14 -
布尔值(Boolean):
- 只有两个可能的值:true 或 false。
true false -
空值(Null):
- 表示缺少值时使用的特殊值。
null
JSON 文本可以被解析和生成以在不同的编程语言和平台之间传输和处理数据。许多编程语言都提供了内置的 JSON 解析和生成库来处理 JSON 数据。
4. JSON示例
以下是几个常见的 JSON 示例,展示了不同类型的数据结构和数据组织方式:
- 简单对象:
{"name": "John","age": 30,"city": "New York"
}
- 嵌套对象:
{"name": "John","age": 30,"address": {"street": "123 Main St","city": "New York","postalCode": "10001"}
}
- 数组:
{"fruits": ["apple", "banana", "orange"]
}
- 嵌套数组:
{"people": [{"name": "John","age": 30},{"name": "Alice","age": 25},{"name": "Bob","age": 35}]
}
- 字符串键名和空值:
{"name": "John","city": null
}
- 其他数据类型:
{"isActive": true,"balance": 1234.56,"numbers": [1, 2, 3],"metadata": {"createdAt": "2023-07-16","version": 1}
}
这些 JSON 示例展示了不同的数据结构,包括简单对象、嵌套对象、数组,以及各种数据类型,例如字符串、数值、布尔值和空值。这些示例可以根据实际需求进行扩展和修改,以适应具体的数据组织和数据交换需求。
5. JASON配置文件示例
在这个示例中,配置文件分为多个部分/段落,每个部分有不同的配置项。以下是对每个部分的解释:
-
app部分包含了应用程序相关的配置项:name:应用程序的名称。version:应用程序的版本号。theme:应用程序的主题样式,可能有 “light” 或 “dark” 等选项。
-
database部分包含了数据库连接相关的配置项:host:数据库服务器的主机地址。port:数据库服务器的端口号。username:连接数据库的用户名。password:连接数据库的密码。
-
log部分包含了日志记录相关的配置项:level:日志记录的级别,如 “debug”、“info”、“warning” 等。file:日志记录输出的文件名。
通过读取和解析这个 JSON 配置文件,应用程序可以获取和使用配置信息来设定其行为和设置。可以根据实际需求添加或修改配置项,以满足特定应用程序的配置需求。
相关文章:
[QT编程系列-35]:数据存储 - JSON格式配置数据的存储与通知
目录 1. QJsonObject 2 QJsonDocument 3 JSON本文格式 4. JSON示例 5. JASON配置文件示例 1. QJsonObject QJsonObject 是Qt的类之一,用于表示 JSON 对象。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式࿰…...
【Spring】Spring 中事务的实现
目录 1.编程式事务(手动编写代码)2.声明式事务(利用注解)2.1 Transactional作用范围2.2 Transactional参数说明2.3 Transactional工作原理 3.Spring 中设置事务隔离级别3.1 事务四大特性ACID3.2 事务的隔离级别3.2 Spring中设置事…...
Linux 学习记录60(ARM篇)
Linux 学习记录60(ARM篇) 本文目录 Linux 学习记录60(ARM篇)一、SPI总线1. 概念2. 硬件连接 二、SPI总线协议三、SPI总线通信模式四、对比IIC总线和SPI总线1. 相同点2. 不同点 思维导图 一、SPI总线 1. 概念 1、SPI总结是Motorola首先提出的全双工三线/四线同步串行总线 2、采…...
尚硅谷大数据项目《在线教育之采集系统》笔记002
视频地址:尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P032 P033 P033 P034 P035 P036 P032 P033 # 1、定义组件,为各组件命名 a1.sources r1 a1.channels c1 a1.sinks - k1# 2、配置sources,描述source a1.sour…...
校园跑腿小程序功能分享
提起校园跑腿小程序大家都不陌生,尤其是对上大学的伙伴们来说,更是熟悉得不能再熟悉了,和我们的生活息息相关,密不可分。 对于现在的年轻人来说,网购是非常简单和方便的一种购物方式,随之快递也会越来越多。在我们国家…...
PHP8的变量-PHP8知识详解
昨天我们讲解了PHP8的常量,今天讲解PHP8的变量。常量有定义常量和预定义常量,变量呢?那就没有定义变量了,那叫给变量赋值,但是还是有预定义变量的。下面就给大家讲解什么是变量、变量赋值及使用及预定义变量。 一、什么…...
图解TCP 三次握手和四次挥手的高频面试题(2023最新版)
大家好,最近重新整理了一版 TCP 三次握手和四次挥手的面试题(2023最新版)。 ----- 任 TCP 虐我千百遍,我仍待 TCP 如初恋。 巨巨巨巨长的提纲,发车!发车! img TCP 基本认识 TCP 头格式有哪些…...
【mysql】Win10安装配置MySQL8.0简要
下载 MySQL官网下载安装包 安装...
SQL SERVER使用发布订阅同步数据库遇到的坑
可能遇到的各种坑 1.在执行 xp_cmdshell 的过程中出错。调用 ‘CreateProcess’ 失败,错误代码: ‘5’ 网上有各种解决办法,包括改本地安全策略,将sql server服务的网络权限改为本机系统,改cmd用户的读写权限,退出360…...
3个命令定位CPU飙高
top 指令找出消耗CPU最厉害的那个进程的pid top -H -p 进程pid 找出耗用CPU资源最多的线程pid printf ‘0x%x\n’ 线程pid 将线程pid转换为16进制 结合jstack 找出哪个代码有问题 jstack 进程pid | grep 16进制的线程pid -A 多少行日志 jstack 进程pid | grep 16进制的线程…...
Java版知识付费 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台免费搭建
提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含:录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署,免费售后,专业技术指导,支持PC、APP、H5、小程序多终端同步,支持二次开发…...
使用多数据源dynamic-datasource-spring-boot-starter遇到的问题记录
记录使用多数据源dynamic-datasource-spring-boot-starter遇到的问题: 1、工程启动失败 缺少clickhouse连接驱动,引入对应的maven依赖 <!--ck连接驱动--><dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>…...
构建语言模型:BERT 分步实施指南
学习目标 了解 BERT 的架构和组件。了解 BERT 输入所需的预处理步骤以及如何处理不同的输入序列长度。获得使用 TensorFlow 或 PyTorch 等流行机器学习框架实施 BERT 的实践知识。了解如何针对特定下游任务(例如文本分类或命名实体识别)微调 BERT。为什么我们需要 BERT? 正…...
⛳ Java多线程 一,线程基础
线程基础 ⛳ Java多线程 一,线程基础🐾 一,线程基础💭 1.1,什么是程序,进程,线程🏭 1.2,什么是并行和并发👣 1.3,线程使用的场景🎨 1.…...
【iOS】多线程 锁问题总结
文章目录 前言1. 你理解的多线程优点缺点 2. atomic 和 nonatomic 的区别及其作用3. GCD的队列类型 - 三种队列类型4. GCD的死锁问题5. 多线程之间的区别和联系6. 进程和线程?进程间的通信方式线程间的通信方式 6. iOS的线程安全手段如何保证 前言 iOS 锁和多线程的…...
Pytorch深度学习-----神经网络之池化层用法详解及其最大池化的使用
系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Co…...
Docker啥是数据持久化?
文章目录 数据持久化数据卷相关命令创建读写数据卷创建只读数据卷数据卷共享数据卷容器实现数据卷共享nginx实现数据卷共享nfs总结 Dockerfile持久化Dockerfile方式docker run总结 数据持久化 在容器层的 UnionFS(联合文件系统)中对文件/目录的任何修…...
CGAL 线段简化算法(2D)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 线段简化是指:在减少一组折线中顶点数量的同时,尽可能保持整体形状的过程。CGAL中提供了一种迭代算法:通过从一条折线上移除顶点 q q q,迭代地将边 ( p , q...
在CentOS 7上挂载硬盘到系统的步骤及操作
目录 1:查询未挂载硬盘2:创建挂载目录3:检查磁盘是否被分区4:格式化硬盘5:挂载目录6:检查挂载状态7:设置开机自动挂载总结: 本文介绍了在CentOS 7上挂载硬盘到系统的详细步骤。通过确…...
螺旋矩阵(JS)
螺旋矩阵 题目 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2: 输入ÿ…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
