Json和Qt中Json的使用学习笔记

视频链接

https://www.bilibili.com/video/BV1yf4y1A7ek/?p=2&spm_id_from=pageDriver&vd_source=fa4ef8f26ae084f9b5f70a5f87e9e41b

Json

JSON是在网络传输中常用的数据格式,能将不同类型的数据统一起来,我们在发送数据前将不同类型的数据存入到JSON中,到客户端后再把JSON中数据一步步解析下来,从而得到我们发送的数据

Json中有两种数据格式:Json数组和Json对象

Json数组

在这里插入图片描述
在这里插入图片描述

Json对象

Json对象用 {} 来描述,每个Json对象里可以存放若干个元素,每个元素对应一个键值对,元素和元素之间用 **逗号 ,**来间隔,最后一个元素没有逗号,需要注意
1. 键(key)必须是字符串类型,位于同一层级的键值对不要重复(因为要通过key来取value的值)
2. value的值是可选的,可以根据实际情况来使用,可用类型包括:整形、浮点型、字符串、布尔类型、json数组,json对象
在这里插入图片描述

注意事项

Json结构简单,但是在嵌套时可以完成比较复杂的业务逻辑,在实际使用中需要我们对业务求进行拆解分析建模,最后使用合适Json数据完成我们的需求
使用时需要注意一下事项

1.无论是使用Json数组和Json对象,里面的最后一个数据后不能再加逗号且key的值必须唯一,否则会导致数据无法正常解析
2.如果需要将Json数据持久化到磁盘里,一般会添加一个.json后缀结尾的文件
3.一个Json文件里,要么只有一个Json对象,要么只有一个Json数组

原因:.json文件是以树状结构来管理的,一个Json对象或者Json数组作为这棵树的根节点,他们中的元素作为这棵树的子节点,子节点可以有很多,元素也可以嵌套,但是根节点只能有一个!读取数据时根据key就能读取到对应的数据

Qt中Json的使用

Qt 5.0后提供了有关Json类的支持,我们可以直接使用这些Qt封装好的类对Json数据进行处理,具体如下
在这里插入图片描述

QJsonValue类

QJsonValue相当于将不同的数据类型放到了一个统一的盒子里,盒子外面贴的什么标签(比如整形,浮点型),那么我们就认为它是什么东西,(实际使用时有对应的函数来判断是什么类型),减少了需要提供的接口的数量,减少了学习成本和使用难度

  • is相关的API可以判断QJsonValue里面封装的是什么
    在这里插入图片描述
  • to相关的API可以将QJsonValue里面的数据转换为对应的类型
    在这里插入图片描述
  • 构造函数相关的重载表示将某种类型的数据封装成QJsonValue类型
    在这里插入图片描述
    QJsonValue中的API不需要特意去记忆,需要就查,放在这里便于查询和记录

QJsonObject类

QJsonObject封装了Json中的对象,里面可以存储多个键值对,键(key)的类型必须是字符串,而值(value)类型是QJsonValue类型
QJsonObject内部的元素是由红黑树维护的,红黑树默认会对存储的元素进行一个升序排序,所以在遍历时会出现遍历顺序与插入顺序不一致的情况

这个类的使用与C++的STL类似,比如
在这里插入图片描述

在这里插入图片描述
第三中遍历方法比较常见
先拿到所有key,这些key被存放到QStringList中,然后再对QStringList进行遍历
在这里插入图片描述

QJsonArray

这个类封装了Json中的数组,为了方便操作,这个数组里存放的类型是QJsonValue类型,使用也类似STL,下标从0开始

在这里插入图片描述
下列函数中,最后一个参数得到的是引用,可以对此元素进行修改,其他函数只能得到拷贝。即修改无效
在这里插入图片描述
在这里插入图片描述
注意:使用API得到数据后,并不是我们需要的原始数据,因为得到数据类型是QJsonValue类型,我们需要对取到的数据进行类型判断再调用相关的to方法才能得到我们原来想要的原始数据

QJsonDocument

  • set方法可以将Array和Object方法封装到对应的QJsonDocument中
  • to方法实现将QJsonDocument文档里的数据转换成字符串类型
  • is方法实现判断有关的功能
    在这里插入图片描述
    静态方法能将字符串类型(QByteArray)类型转换成Document类型,有了Document就能通过is方法 + object/array方法转换成对应的对象类型或者是数组类型,这样就能对他们进行操作了
    在这里插入图片描述

Json对数据的序列化和反序列化

数据序列化流程

转换流程:先有QJsonObject或者QJsonArray => QJsonDocument => Json =>数据传输或者写入磁盘
在这里插入图片描述

数据反序列化流程

注意:
1.不要试图写出一套通用解析所有Json数据的代码!!针对不同格式的Json数据写出对应的读写代码就可以了,怎样的组成就怎么读

2.当需要对Json文件中的数据进行增删改查时,直接将对应的Json文件中的数据导入内存中,然后在内存进行修改,修改完之后再将改好的数据写回原文件中(相当于对原来文件的数据进行覆盖)
在这里插入图片描述

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

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

相关文章

Mysql入门基础教程(第一部分)

Mysql入门教程 MySQL基础教程解释了一些基本的SQL语句。如果这是您第一次使用关系数据库管理系统,本教程将为您提供使用MySQL数据库服务器所需的一切,例如查询数据,更新数据,管理数据库和创建表。 如果您已经熟悉其他关系数据库…

MySQL基础知识——MySQL日志

一条查询语句的执行过程一般是经过连接器、 分析器、 优化器、 执行器等功能模块, 最后到达存储引擎。 那么, 一条更新语句的执行流程又是怎样的呢? 下面我们从一个表的一条更新语句进行具体介绍: 假设这个表有一个主键ID和一个…

C++矩阵

C矩阵【基本】&#xff08;will循环&#xff09; #include<iostream> #include<string.h> using namespace std; int main() {int a[100][100]{0};int k 1;int i 0;int j 0;while(k<100){if(j>10){j0;i;}a[i][j]k;j;k;}i 0;j 0;while(true){if(i 9&am…

HarmonyOS实战开发-自定义通知角标、如何设定应用的桌面图标角标的功能。

介绍 本示例主要展示了设定应用的桌面图标角标的功能&#xff0c;使用ohos.notificationManager 接口&#xff0c;进行桌面角标的设置&#xff0c;通知的发送&#xff0c;获取等。 效果预览 使用说明 在使用本应用时&#xff0c;需安装并启动仿桌面应用&#xff1b;在主界面…

汇舟问卷:海外问卷调查怎么样?

越来越多的企业决定采用线上调查的方式来了解消费者的意愿。这种转变不仅反映了科技发展的必然趋势&#xff0c;也凸显了企业对市场动态和消费者需求的高度重视。 线上调查能够覆盖更广泛的受众群体&#xff0c;通过互联网的普及&#xff0c;企业可以轻松地触及全国各地的消费…

Clickhouse在CentOS8上安装部署

➜ wget https://github.com/ClickHouse/ClickHouse/releases/download/v24.3.2.23-lts/clickhouse-client-24.3.2.23.x86_64.rpm ➜ wget https://github.com/ClickHouse/ClickHouse/releases/download/v24.3.2.23-lts/clickhouse-server-24.3.2.23.x86_64.rpm ➜ wget htt…

C语言零碎知识点 02

i是先赋值在1&#xff0c;而1是先1再赋值 很多情况下逗号都只是单纯地用做分隔符 goto 语句用于一次性跳出多层循环&#xff0c;因为break只能跳出一层&#xff0c;其余情况下不要用&#xff0c;因为它会破坏代码本身的逻辑。 C语言中交换两个变量需要一个零时变量&#xff0c;…

《神奇女侠3:暗黑之魂》AI制作电影短片(上)

《神奇女侠3&#xff1a;暗黑之魂》AI制作电影短片&#xff08;上&#xff09; 黑暗滋生&#xff0c;世界沦陷&#xff0c;神奇女侠独战群魔&#xff0c;唤醒挚爱&#xff0c;守护最后的光明&#xff01; 《神奇女侠3&#xff1a;暗黑之魂》&#xff08;上&#xff09;电影开篇…

Pytorch深度学习完整CPU图像分类代码

1.准备数据集 train_data torchvision.datasets.CIFAR10("../data",trainTrue,transformtorchvision.transforms.ToTensor(),downloadTrue) test_data torchvision.datasets.CIFAR10("../data",trainFalse,transformtorchvision.transforms.ToTensor(),…

数据可视化插件echarts【前端】

数据可视化插件echarts【前端】 前言版权开源推荐数据可视化插件echarts一、如何使用1.1 下载1.2 找到js文件1.3 入门使用1.4 我的使用 二、前后端交互&#xff1a;入门demo2.1 前端htmljs 2.2 后端entitycontrollerservicemapper 三、前后端交互&#xff1a;动态数据3.1 前端j…

【08】c++运算符重载

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、加号运算符二、左移运算符三.递增或者递减运算符总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;C运算符重载…

JVM性能调优——OOM分类及解决方案

文章目录 1、概述2、OOM案例1&#xff1a;堆内存溢出3、OOM案例2&#xff1a;元空间溢出4、OOM案例3:GC overhead limit exceeded5、OOM案例4&#xff1a;线程溢出6、小结 在工作中会经常遇到内存溢出(Out Of Memory,OOM)异常的情况&#xff0c;每当遇到OOM&#xff0c;总是让人…

关于使用druid数据源连接Oracle导致的SQLRecoverableException(socket read timeout,关闭的连接等)

背景 数据源初始化后,获取Oracle的连接进行查询操作,相隔 半个小时 左右,再次对同一数据库进行查询操作。 问题 第二次查询的时候,就会出现如下一些异常情况 2019-06-05 14:17:58.247 [CorePoolHandler-thread-6] ERROR [LOGID:] com.alibaba.druid.pool.DruidDataSource -…

matlab2024a软件下载

matlab2024a软件下载 MATLAB R2024a版本终于来了&#xff0c;通过上一个版本连续更新至Update7就预感这个版本将带来更多的新功能及增强。MATLAB更新包括编辑器拼写检查、面板导航、局部函数、Python接口互操作性、REST函数服务、安全信息存储以及ode对象求解器。Simulink更新…

camera驱动学习总结记录

https://www.yuque.com/u2132176/yfiyal/ch1zsrgzevcwf1rw 视频教程里面对应的gc2053c驱动源码注解&#xff1a; gc2053.c(60 KB) 对应的驱动文档&#xff1a; Rockchip_Driver_Guide_VI_CN_v1.1.1(2).pdf(2.3 MB) 视频里面对应的mipi协议文档汇总&#xff1a; MIPI标准文档大…

lv_micropython to download and building

想要在ESP32-C3使用Micropython开发GUI&#xff0c;所以需要编译lv_micropython&#xff0c;当前github上的版本是9.1.0。 一、开发环境 因为编译lv_micropython需要在linux系统下&#xff0c;但是我的电脑是windows系统&#xff0c;所以我在windows系统上安装了VMware虚拟机&…

如何用composer来安装和配置LAMP环境?

LAMP环境是一个开发和运行Web应用程序的常见环境&#xff0c;它由Linux、Apache、MySQL和PHP组成。Composer是一个用于管理PHP依赖关系的工具&#xff0c;可以方便地安装和配置LAMP环境中的各种软件包。下面是使用Composer安装和配置LAMP环境的步骤&#xff1a; 安装Composer&a…

Django框架设计原理

相信大多数的Web开发者对于MVC&#xff08;Model、View、Controller&#xff09;设计模式都不陌生&#xff0c;该设计模式已经成为Web框架中一种事实上的标准了&#xff0c;Django框架自然也是一个遵循MVC设计模式的框架。不过从严格意义上讲&#xff0c;Django框架采用了一种更…

C语言什么是指针? 什么是指针变量?

一、问题 指针是 C 语⾔中的⼀个重要概念&#xff0c;也是 C 语⾔中的⼀个重要特⾊。它的身影在整个 C 语⾔体系中都会出现&#xff0c;⽽且其概念也⼗分复杂&#xff0c;需要多加注意和思考。 二、解答 为了更好地弄清指针的概念&#xff0c;这⾥不得不先提到地址以及数据在内…

MySQL知识整理

MySQL知识整理 基础第一讲&#xff1a;基础架构&#xff1a;一条SQL查询语句是如何执行的&#xff1f;架构尽量减少长连接的原因和方案为什么尽量不要依赖查询缓存 索引第四讲&#xff1a;深入浅出索引&#xff08;上&#xff09;第五讲&#xff1a;深入浅出索引&#xff08;下…