[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 操作:

  1. 创建一个空的 JSON 对象:

    QJsonObject obj;
    
  2. 添加键值对数据到 JSON 对象:

    obj["name"] = "John";
    obj["age"] = 30;
    obj["email"] = "john@example.com";
    
  3. 从 JSON 对象中获取键值对数据:

    QString name = obj["name"].toString();
    int age = obj["age"].toInt();
    QString email = obj["email"].toString();
    
  4. 检查 JSON 对象中是否包含特定的键:

    if (obj.contains("email")) {// JSON 对象包含键 "email"
    }
    
  5. 从 JSON 对象中移除特定的键值对数据:

    obj.remove("age");
    
  6. 将 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 操作:

  1. 将 JSON 字符串解析为 QJsonDocument:

    QString jsonString = "{\"name\": \"John\", \"age\": 30}";
    QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8());
    
  2. 将 QJsonDocument 转换为 JSON 字符串:

    QString jsonString = doc.toJson(QJsonDocument::Compact);
    

    这里的 Compact 参数表示将生成的 JSON 字符串压缩为紧凑的形式,也可以选择 Indented 参数来添加缩进和换行,使其更易读。

  3. 获取 QJsonDocument 的根对象 QJsonObject:

    QJsonObject obj = doc.object();
    
  4. 创建一个空的 QJsonDocument:

    QJsonDocument doc;
    
  5. 将 QJsonDocument 转换为二进制数据进行存储或发送:

    QByteArray jsonData = doc.toBinaryData();
    
  6. 从二进制数据中解析 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 文本的基本语法规则:

  1. 对象(Object):

    • 使用大括号 {} 包围。
    • 键值对之间使用逗号 , 分隔。
    • 键(Key)必须是一个字符串(String)。
    • 值(Value)可以是字符串、数值、布尔值、对象、数组或 null。
    {"name": "John","age": 30,"hasPets": true,"address": {"street": "123 Main St","city": "New York"},"favoriteFruits": ["apple", "banana", "orange"]
    }
    
  2. 数组(Array):

    • 使用方括号 [] 包围。
    • 数组中的元素之间使用逗号 , 分隔。
    • 元素可以是字符串、数值、布尔值、对象、数组或 null。
    ["apple", "banana", "orange"]
    
  3. 字符串(String):

    • 使用双引号 " 包围。
    • 可以包含任意 Unicode 字符。
    "Hello, World!"
    
  4. 数值(Number):

    • 可以是整数或浮点数。
    42
    3.14
    
  5. 布尔值(Boolean):

    • 只有两个可能的值:true 或 false。
    true
    false
    
  6. 空值(Null):

    • 表示缺少值时使用的特殊值。
    null
    

JSON 文本可以被解析和生成以在不同的编程语言和平台之间传输和处理数据。许多编程语言都提供了内置的 JSON 解析和生成库来处理 JSON 数据。

4. JSON示例

以下是几个常见的 JSON 示例,展示了不同类型的数据结构和数据组织方式:

  1. 简单对象:
{"name": "John","age": 30,"city": "New York"
}

  1. 嵌套对象:
{"name": "John","age": 30,"address": {"street": "123 Main St","city": "New York","postalCode": "10001"}
}

  1. 数组:
{"fruits": ["apple", "banana", "orange"]
}

  1. 嵌套数组:
{"people": [{"name": "John","age": 30},{"name": "Alice","age": 25},{"name": "Bob","age": 35}]
}

  1. 字符串键名和空值:
{"name": "John","city": null
}

  1. 其他数据类型:
{"isActive": true,"balance": 1234.56,"numbers": [1, 2, 3],"metadata": {"createdAt": "2023-07-16","version": 1}
}

这些 JSON 示例展示了不同的数据结构,包括简单对象、嵌套对象、数组,以及各种数据类型,例如字符串、数值、布尔值和空值。这些示例可以根据实际需求进行扩展和修改,以适应具体的数据组织和数据交换需求。

5. JASON配置文件示例

在这个示例中,配置文件分为多个部分/段落,每个部分有不同的配置项。以下是对每个部分的解释:

  1. app 部分包含了应用程序相关的配置项:

    • name:应用程序的名称。
    • version:应用程序的版本号。
    • theme:应用程序的主题样式,可能有 “light” 或 “dark” 等选项。
  2. database 部分包含了数据库连接相关的配置项:

    • host:数据库服务器的主机地址。
    • port:数据库服务器的端口号。
    • username:连接数据库的用户名。
    • password:连接数据库的密码。
  3. log 部分包含了日志记录相关的配置项:

    • level:日志记录的级别,如 “debug”、“info”、“warning” 等。
    • file:日志记录输出的文件名。

通过读取和解析这个 JSON 配置文件,应用程序可以获取和使用配置信息来设定其行为和设置。可以根据实际需求添加或修改配置项,以满足特定应用程序的配置需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kagNet:对常识推理的知识感知图网络 2023 AAAI 8.4+8.5

这里写目录标题 摘要介绍概述问题陈述推理流程 模式图基础概念识别模式图构造概念网通过寻找路径来匹配子图基于KG嵌入的路径修剪 知识感知图网络图卷积网络&#xff08;GCN&#xff09;关系路径编码分层注意机制 实验数据集和实验步骤比较方法KAGNET是实施细节性能比较和分析与…

Netty:ByteBuf的readerIndex和writerIndex

说明 io.netty.buffer.ByteBuf的数据索引从0开始。ByteBuf保存一个readerIndex和一个writerIndex变量。readerIndex用于读取操作&#xff0c;writerIndex用于写入操作。 0 < readerIndex < writerIndex < capacity < maxCapacity 示例 获取当前的readerIndex和w…

mysql授权

1.dml权限 mysql> grant select,delete,update,insert,create on netcentre.* to ln_sale% identified by password; Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> show grants for ln_sale%; ------------------------------------------------------------…

python GUI nicegui初识一(登录界面创建)

最近尝试了python的nicegui库&#xff0c;虽然可能也有一些不足&#xff0c;但个人感觉对于想要开发不过对ui设计感到很麻烦的人来说是很友好的了&#xff0c;毕竟nicegui可以利用TailwindCSS和Quasar进行ui开发&#xff0c;并且也支持定制自己的css样式。 这里记录一下自己利…

【Spring框架】Spring事务

目录 Spring中事务的实现编程式事务声明式事务Transactional 作⽤范围Transactional 参数说明注意事项Transactional ⼯作原理 MySQL 事务隔离级别Spring 事务隔离级别事务传播机制 Spring中事务的实现 Spring中事务操作分为两类&#xff1a; 1.编程式事务 2.声明式事务 编程…

Abaqus 中最常用的子程序有哪些 硕迪科技

在ABAQUS中&#xff0c;用户定义的子程序是一种重要的构件&#xff0c;可以将其插入到Abaqus分析中以增强该软件的功能和灵活性。这些子程序允许用户在分析过程中添加自定义材料模型、边界条件、初始化、加载等特定操作&#xff0c;以便更精准地模拟分析中的现象和现象。ABAQUS…

小白电脑装机(自用)

几个月前买了配件想自己装电脑&#xff0c;结果最后无法成功点亮&#xff0c;出现的问题是主板上的DebugLED黄灯常亮&#xff0c;即DRAM灯亮。对于微星主板的Debug灯&#xff0c;其含义这篇博文中有说明。 根据另一篇博文&#xff0c;有两种可能。 我这边曾将内存条和主板一块…

作为一名3年经验的java开发,对未来发展的思考

前言 已经好久没有更新博客了&#xff0c;一直在工作中忙碌&#xff0c;下班后不是学习就是运动&#xff0c;也逐渐忘记了自己以前有写博客的习惯&#xff0c;想起3年前刚毕业那会找工作的焦头烂额&#xff0c;每天发博客的目的是为了刺激自己能够更加努力上进&#xff0c;告诉…

MISRA 2012学习笔记(1)-Directives

文章目录 说明Directives2 编译与构建Dir 2.1 3 需求可追溯性Dir 3.1 4 代码设计Dir 4.1Dir 4.2Dir 4.3Dir 4.4Dir 4.5Dir 4.6Dir 4.7Dir 4.8Dir 4.9Dir 4.10Dir 4.11Dir 4.12Dir 4.13 说明 以下等级一般分为三种&#xff0c;建议&#xff0c;必要&#xff0c;强制 建议&#…

mongodb-win32-x86_64-2008plus-ssl-3.6.23-signed.msi

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.6\binC:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin>mongod --dbpath C:\Mongo…

c语言每日一练(2)

前言&#xff1a; 每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

Nginx启动报错- Failed to start The nginx HTTP and reverse proxy server

根据日志&#xff0c;仍然出现 “bind() to 0.0.0.0:8888 failed (13: Permission denied)” 错误。这意味着 Nginx 仍然无法绑定到 8888 端口&#xff0c;即使使用 root 权限。 请执行以下操作来进一步排查问题&#xff1a; 确保没有其他进程占用 8888 端口&#xff1a;使用以…

Java-JUC(七)

1.Java中实现多线程有几种方法 创建线程的常用的几种方式&#xff1a; 继承Thread类 实现Runnable接口 &#xff08;重写run方法&#xff0c;无返回值&#xff09; 实现Callable接口&#xff08; JDK1.5>,重写call方法&#xff0c;可以自定义返回值 &#xff09; 线程池方…

python#django数据库一对一/一对多/多对多

一对一OneToOneField 用户和用户信息 搭建 # 一对一 class TestUser(models.Model): usernamemodels.CharField(max_length32) password models.CharField(max_length32) class TestInfo(models.Model): mick_namemodels.CharField(max_length32) usermode…

企业计算机服务器中了locked勒索病毒怎么办,如何预防勒索病毒攻击

计算机服务器是企业的关键信息基础设备&#xff0c;随着计算机技术的不断发展&#xff0c;企业的计算机服务器也成为了众多勒索者的攻击目标&#xff0c;勒索病毒成为当下计算机服务器的主要攻击目标。近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的服务器被locked…

【网络编程】TCP带外数据总结

文章目录 一、带外数据基本知识二、带外数据的读写三、检测带外数据是否到达3.1、select上的异常事件3.2、SIGURG信号 四、带外标记 一、带外数据基本知识 带外数据&#xff08;Out Of Band&#xff0c;OOB&#xff09;&#xff0c;用于迅速通告对方本端发生的重要事件&#xf…

leaflet-uniapp 缩放地图的同时 显示当前缩放层级

记录实现过程&#xff1a; 需求为移动端用户在使用地图时&#xff0c;缩放地图的同时&#xff0c;可以获知地图此时缩放的级别。 效果图如下&#xff1a;此时缩放地图级别为13 map.on() 有对应的诸多行为 查看官网即可&#xff0c;这里根据需要为--zoomstart zoom zoomend 代…

Crowd-Robot Interaction 论文阅读

论文信息 题目&#xff1a;Crowd-Robot Interaction:Crowd-aware Robot Navigation with Attention-based Deep Reinforcement Learning 作者&#xff1a;Changan Chen, Y uejiang Liu 代码地址&#xff1a;https://github.com/vita-epfl/CrowdNav 来源&#xff1a;arXiv 时间…

【Linux】网络套接字知识点补足

目录 1 地址转换函数 1.1 字符串转in_addr的函数: 1.2 in_addr转字符串的函数: 1.3 关于inet_ntoa 2 TCP协议通讯流程 1 地址转换函数 本节只介绍基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位 的IP 地址但是我们通常用点分十进制的字符串…

无涯教程-Perl - bind函数

描述 此功能将网络地址绑定到由SOCKET标识的文件句柄。地址应该是用于打开的Socket的适当类型的打包地址。 语法 以下是此函数的简单语法- bind SOCKET, ADDRESS 返回值 如果失败,此函数返回0,如果成功,则返回1。 Perl 中的 bind函数 - 无涯教程网无涯教程网提供描述此功能…