QT笔记---JSON
QT笔记---JSON
- JSON
- 1、JSON基本概念
- 1.1、判断.json文件工具
- 2、生成.json数据
- 3、解析.json数据
JSON
在现代软件开发中,数据的交换和存储格式至关重要。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁易读、易于解析和生成的特点,被广泛应用于各种应用程序中。在 QT 框架下,处理 JSON 数据同样便捷高效。
本文参考链接:https://blog.csdn.net/qq_42432673/article/details/132115700
1、JSON基本概念
JSON 数据结构主要由两种类型构成:对象(object)和数组(array)。对象是由键值对组成的无序集合,键必须是字符串,值可以是字符串、数字、布尔值、null、对象或数组。数组则是值的有序集合,这些值同样可以是上述各种类型。例如:
{"address": {"city": "WuHan","street": "luck"},"age": "31","hobbies": ["reading","painting","playing guitar"],"isStudent": "true","name": "John Doe","phoneNumbers": [{"number": "888-1234","type": "home"},{"number": "888-5678","type": "work"}]
}
1.1、判断.json文件工具
JSON转C#实体类网站,可判断JSON文件是否正确:https://www.bejson.com/convert/json2csharp/
2、生成.json数据
根据以上json内存,创建一个文件夹,将其写入.json文件夹,保存在项目下,运行代码如下所示:
//包含的头文件
#include <QMainWindow>
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QString>
#include <QFile>//创建一个json文件,写入参数,并保存在对应的路径下
void MainWindow::WriteToFile()
{QString m_path = QString::fromStdString(QCoreApplication::applicationDirPath().toStdString()+"//cfg.json");createJsonFile(m_path);
}
void MainWindow::createJsonFile(const QString &filePath)
{//创建一个JSON对象QJsonObject jsonObj;//插入name 键值对到 jsonObjjsonObj["name"]="John Doe";//jsonObj.insert("name","John Doe");//插入age 键值对到 jsonObjjsonObj["age"]="31";//jsonObj.insert("age","31");//创建地址JSON对象,里面包含两个键值对QJsonObject addressObj;//插入city 键值到 “New York”addressObj.insert("city","WuHan");addressObj.insert("street","luck");jsonObj.insert("address",addressObj);//创建地址JSON对象,里面包含两个键值对QJsonArray phoneArray;//创建两个电话的JSON对象QJsonObject phoneHomeObj;phoneHomeObj.insert("type","home");phoneHomeObj.insert("number","888-1234");QJsonObject phoneWorkObj;phoneWorkObj.insert("type","work");phoneWorkObj.insert("number","888-5678");//将电话JSON数组中添加两个电话JSON对象phoneArray.append(phoneHomeObj);phoneArray.append(phoneWorkObj);//将电话JSON数组中添加两个电话JSON对象jsonObj.insert("phoneNumbers",phoneArray);//创建地址JSON对象,里面包含了三组数组QJsonArray hobbArray;hobbArray.append("reading");hobbArray.append("painting");hobbArray.append("playing guitar");jsonObj.insert("hobbies",hobbArray);jsonObj["isStudent"]="true";//创建一个JSON文档QJsonDocument jsonDoc(jsonObj);//将JSON文档内容写入文件QFile file(filePath);if(!file.open(QIODevice::WriteOnly)){//处理错误,例如可以抛出异常或者返回错误的标志return;}file.write(jsonDoc.toJson());file.close();
}
3、解析.json数据
创建一个cfg.json文件,将其内容粘贴负责其内;
{"name": "小王","age": 30,"address": {"city": "北京","street": "人民路32号"},"phoneNumbers": [{"number": "999-123456","type": "家"},{"number": "999-654321","type": "公司"}]
}
使用QT解析以上json内容:
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QDebug>
#include <QFile>QByteArray MainWindow::ReadJsonString(QString file_path)
{QFile file(file_path); //根据路径打卡文件if (false == file.exists()) //判断文件是否存在{return "none";}if (false == file.open(QIODevice::ReadOnly | QIODevice::Text)) //判断文件是否可以正常以只读模式打开{return "none";}QByteArray string_value = file.readAll(); //读出.json所以内容file.close();return string_value;
}void MainWindow::AnalyJson()
{
//json文件所在路径,可根据自己随意定制QString path= QString::fromStdString(QCoreApplication::applicationDirPath().toStdString()+"//cfg.json");QByteArray reg_fpga = ReadJsonString(path);// 字符串格式化为JSON文档QJsonParseError err_rpt;QJsonDocument reg_fpga_root = QJsonDocument::fromJson(reg_fpga, &err_rpt);if (err_rpt.error != QJsonParseError::NoError){// 不是 JSON 对象:JSON 字符串格式错误或无效std::cout << "json 格式错误" << std::endl;// return 0;}//将 QJsonDocument 对象中的 JSON 数据转换为 JSON 对象QJsonObject reg_object = reg_fpga_root.object();// 获取 JSON 数据中的所有键QStringList keys = reg_object.keys();// 遍历键值对for (int i = 0;i<keys.size();++i) {// 获取每一个 keyQString key = keys[i];// 通过 key 获取对应的 valueQJsonValue value = obj.value(key);if(value.isBool()){// 值是一个 boolqDebug()<<key<<":"<<value.toBool();}else if(value.isString()){// 值是一个字符串qDebug()<<key<<":"<<value.toString();}else if(value.isDouble()){// 值是一个 double 或者 int(double 和 int 都用 isDouble)qDebug()<<key<<":"<<value.toInt();}else if(value.isObject()){// 值是一个 JSON 对象qDebug()<<key<<":";// 这里偷个懒,不再像上面那样循环获取值了,而是直接通过已知的键去获取值QJsonObject addressObj = value.toObject();QString city = addressObj["city"].toString();QString street = addressObj["street"].toString();qDebug()<<" "<<"city:"<<city;qDebug()<<" "<<"street:"<<street;}else if (value.isArray()){// 值是一个 JSON 数组qDebug()<<key<<":";QJsonArray phoneArray = value.toArray();for (int i = 0;i<phoneArray.size();++i) {// 遍历 JSON 数组中的每一个 JSON 对象QJsonObject phoneObj = phoneArray[i].toObject();QString number = phoneObj["number"].toString();QString type = phoneObj["type"].toString();qDebug()<<" "<<"number:"<<number;qDebug()<<" "<<"type:"<<type;}}}
}
相关文章:
QT笔记---JSON
QT笔记---JSON JSON1、JSON基本概念1.1、判断.json文件工具 2、生成.json数据3、解析.json数据 JSON 在现代软件开发中,数据的交换和存储格式至关重要。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁易…...
C站算法技能题-题解(javascript)
切面条 const 切面条 (n10)>{return 2 ** n 1; } 切面条(0) 2 切面条(1) 3 切面条(2) 5 切面条(10) 1025大衍数列 const 大衍数列 (n100) > {let ans []for(let i1;i<n;i){if(i%2 0){ans.push((i ** 2 ) / 2)}else{ans.push((i ** 2 - 1) / 2)}}return ans…...
专利信息管理知识产权基于Spring Boot SSM
目录 一、需求分析 1.1系统用户角色与权限 1.2 专利信息管理功能 二、数据分析与报表生成 三、系统性能与安全性 四 用户体验与界面设计 五 扩展性与可维护性 六、法律法规与合规性 七. 技术选型与实现 7.1技术选型: 7.2实现方式: 随…...
掌握新编程语言的秘诀:利用 AI 快速上手 Python、Go、Java 和 Rust
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
KiLog2MaximumIncrement的由来和KiMaximumIncrementReciprocal的由来
第一部分:KiLog2MaximumIncrement的由来 i 1; j KeMaximumIncrement; while ((1UI64<<i) < KeMaximumIncrement) { i; } KiLog2MaximumIncrement i; 2^17131072 2^18262144 i18KiLog2MaximumIncrement 中…...
工具层handle_excel
该工具类利用openpyxl的load_workbook加载Excel,通过iter_rows按行迭代数据,将表头和用例数据用zipdict组合成字典,通过list.append将字典(单条测试用例)追加到列表中,从而封装Excel数据解析工具。 模块/类方法/属性使用场景描述o…...
解释 RESTful API,以及如何使用它构建 web 应用程序
RESTful API 是一种符合 REST 架构风格的 API 设计,它基于 HTTP 协议来进行通信,通过对资源进行标识、定义各种操作,并使用 HTTP 请求方法来进行操作(比如 GET、POST、PUT、DELETE 等),实现客户端与服务器之…...
区块链赋能项目包装融资:开启融资新范式
在当今充满挑战与机遇的商业环境中,项目融资对于企业的发展壮大起着关键作用。而项目包装作为吸引投资者、展示项目价值的重要手段,其方式正随着科技的发展不断革新。区块链技术的兴起,为项目包装融资带来了全新的思路与变革,深刻…...
【Linux】应用层自定义协议 + 序列化和反序列化
应用层自定义协议 序列化和反序列化 一.应用层1.再谈 "协议"2.序列化 和 反序列化 二. Jsoncpp1.序列化2.反序列化 三. Tcp全双工 面向字节流四.自定义协议 保证报文的完整性1.Makefile2.Mutex.hpp3.Cond.hpp4.Log.hpp5.Thread.hpp6.ThreadPool.hpp7.Common.hpp8.…...
框架的CVE漏洞利用 php类 java类 手工操作和自动化操作蓝队分析漏洞利用的流量特征
前言 php重要框架和基本的识别特征 php的主要是 tp框架 和 laravel 当然还有 yii等 tp的主要特征 1\报错信息: 2、图标 3、请求头 Laravel特征 1、报错信息 2、请求头 php框架CVE利用 lavarvel 工具 https://github.com/zhzyker/CVE-2021-3129 https://git…...
使用 .github/realse.yml 自动生成 release change log
🚀 发现 gone-io/gone:一个优雅的 Go 依赖注入框架!💻 它让您的代码更简洁、更易测试。🔍 框架轻量却功能强大,完美平衡了灵活性与易用性。⭐ 如果您喜欢这个项目,请给我们点个星!🌟 您的支持是我们前进的动力!🤝 欢迎贡献代码或提出建议,一起让 gone 变得更好…...
python学习笔记--实现简单的爬虫(一)
任务:爬取豆瓣最受欢迎的250个电影的资料 链接:豆瓣电影 Top 250 用浏览器打开后,使用F12或鼠标右键--检查,查看网页的源代码,分析网页结构,如下图所示: 分析后得知: 1.电影名位于…...
[学习笔记] 部署Docker搭建靶场
前言 我们需要部署Docker来搭建靶场题目,他可以提供一个隔离的环境,方便在不同的机器上部署,接下来,我会记录我的操作过程,简单的部署一道题目 Docker安装 不推荐在物理机上部署,可能会遇到一些问题&…...
二分查找-在排序数组中查找元素的第一个和最后一个位置
34.在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(…...
蓝桥杯真题 2109.统计子矩阵
原题地址:1.统计子矩阵 - 蓝桥云课 问题描述 给定一个 NMNM 的矩阵 AA, 请你统计有多少个子矩阵 (最小 1111, 最大 NM)NM) 满足子矩阵中所有数的和不超过给定的整数 KK ? 输入格式 第一行包含三个整数 N,MN,M 和 KK. 之后 NN 行每行包含 MM 个整数, 代表矩阵 AA. 输出格…...
学术型ppt制作经验分享 - 如何美化科研ppt?
WordinPPT / 持续为双一流高校、科研院所、企业等提供PPT制作系统服务。 - 院士增选、国家科技奖、杰青、长江学者特聘教授、校企联聘教授、重点研发、优青、青长、青拔... / 学术型ppt制作经验分享 部分页面内容 / PPT全文共101页 - 科学技术奖ppt:自然科学奖…...
Python数据可视化实战:从基础图表到高级分析
Python数据可视化实战:从基础图表到高级分析 数据可视化是数据分析的重要环节,通过直观的图表可以快速洞察数据规律。本文将通过5个实际案例,手把手教你使用Python的Matplotlib库完成各类数据可视化任务,涵盖条形图、堆积面积图、…...
稳定运行的以Oracle NoSQL数据库为数据源和目标的ETL性能变差时提高性能方法和步骤
提高基于Oracle NoSQL数据库的ETL(提取、转换、加载)性能时,主要从多个角度进行优化。 提高基于Oracle NoSQL数据库的ETL性能需要综合考虑多个方面,关键是减少不必要的I/O操作、优化数据转换和加载过程、合理配置Oracle NoSQL数据…...
ORACLE 19.8版本数据库环境EXPDP导数据的报错处理
近期用户在做EXPDP导出时,报错异常termination终止;EXPDP本身是简单的功能并且这个环境也是经常做导出的,到底是什么原因导致了这个问题呢? 导出脚本报错: 分析导出日志,当时系统资源充足但是进程启动失败,…...
GPT-5 将免费向所有用户开放?
GPT-5 将免费向所有用户开放? 硅谷知名分析师 Ben Thompson 最近与 OpenAI CEO Sam Altman 进行了一场深度对谈,其中Sam Altman透漏GPT-5将免费向大家发放。 OpenAI 这波操作可不是一时冲动,而是被逼出来的。DeepSeek 这个新秀横空出世&am…...
【AI模型】深度解析:DeepSeek的联网搜索的实现原理与认知误区
一、大模型的“联网魔法”:原来你是这样上网的! 在人工智能这个舞台上,大模型们可是妥妥的明星。像DeepSeek、QWen这些大模型,个个都是知识渊博的“学霸”,推理、生成文本那叫一个厉害。不过,要是论起上网…...
学习笔记--基于Sa-Token 实现Java项目单点登录+同端互斥检测
目录 同端互斥登录 单点登录SSO 架构选型 模式二: URL重定向传播 前后端分离 整体流程 准备工作 搭建客户端 搭建认证中心SSO Server 环境配置 开放认证接口 启动类 跨域处理 同端互斥登录 同端互斥登陆 模块 同端互斥登录指:同一类型设备上只允许单地…...
Can通信流程
下面给出一个更详细的 CAN 发送报文的程序流程说明,结合 HAL 库的使用及代码示例,帮助你了解每一步的具体操作和内部原理。 一、系统与外设初始化 1.1 HAL 库初始化 在 main() 函数开头,首先调用 HAL 库初始化函数: HAL_Init()…...
基于BClinux8部署Ceph 19.2(squid)集群
#作者:闫乾苓 文章目录 1.版本选择Ceph版本发布历史目前官方在维护的版本 2.部署方法3.服务器规划4.前置配置4.1系统更新4.2配置hosts cat >> /etc/hosts << EOFssh-keygenssh-copy-id ceph01ssh-copy-id ceph02ssh-copy-id ceph034.5 Python34.6 Syst…...
Workerman5.0如何实现一对一聊天
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
c#难点整理2
1.对象池的使用 就是先定义一系列的对象,用一个,调一个。 public class ObjectPool<T> where T : new(){private Queue<T> pool; // 用于存储对象的队列private int maxSize; // 对象池的最大容量// 构造函数public ObjectPool(int maxSi…...
STM32基础教程——定时器
前言 TIM定时器(Timer):STM32的TIM定时器是一种功能强大的外设模块,通过时基单元(包含预分频器、计数器和自动重载寄存器)实现精准定时和计数功能。其核心原理是:内部时钟(CK_INT)或…...
How to share files with Windows via samba in Linux mint 22
概述 Windows是大家日常使用最多的操作系统,在Windows主机之间,可以共享文件,那么如何在Windows主机与Linux主机之间共享文件呢? 要在Windows主机与Linux主机之间共享文件,我们可以借助Samba协议完成。借助Samba协议…...
[AI速读]如何构建高效的AMBA协议检查器(Checker IP)
在芯片验证过程中,检查器(Checker)是确保设计符合协议规范的关键工具。本文基于一篇技术论文,分享如何为AMBA协议(如AXI、AHB)构建可重用的检查器IP(Checker IP,简称CIP),并简化其核心思路,帮助工程师快速上手。 一、什么是Checker IP? Checker IP是一组用SystemVe…...
VBA-Excel
VBA 一、数据类型与变量 常用数据类型: Byte:字节型,0~255。Integer:整数型,用于存储整数值,范围 -32768 到 32767。Long:长整型,可存储更大范围的整数,范围 -214748364…...
网络华为HCIA+HCIP IPv6
目录 IPv4现状 IPv6基本报头 IPv6扩展报头 IPv6地址 IPv6地址缩写规范 编辑 IPv6地址分配 IPv6单播地址分配 IPv6单播地址接口标识 IPv6常见单播地址 - GUA (2 / 3 开头) IPv6常见单播地址 - ULA IPv6常见单播地址 - LLA IPv6组播地…...
LeetCode 每日一题 2025/3/17-2025/3/23
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 3/17 1963. 使字符串平衡的最小交换次数3/18 2614. 对角线上的质数3/19 2610. 转换二维数组3/20 2612. 最少翻转操作数3/21 2680. 最大或值3/22 2643. 一最多的行3/23 2116…...
git tag以及git
git tag 以及git 一、先说收获吧 1. git bash 在windows上 类似于linux的bash提供的shell命令行窗口,可以执行很多linux命令,cd pwd ls vim cat touch mkdir,还可以用正则匹配查看标签。相当于在windows上装了一个小的linux。git init myproj…...
Android 自定义变形 MD5 算法
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ MD5是一种哈希函数,用于将任意长度的数据映射为一个固定长度的哈希值。它由 Ron Rivest 在 1991 年设计,是继 MD4 之后的改进版本。 M…...
【SpringBoot】MorningBox小程序的完整后端接口文档
以下是「晨光宅配」小程序的完整接口文档,涵盖了所有12个表的接口。 每个接口包括请求方法、URL、请求参数、响应格式和示例 接口文档 1. 用户模块 1.1 获取用户信息 URL: /user/{userId}方法: GET请求参数: userId (路径参数): 用户ID响应格式:{"userId": 1,&qu…...
2025年01月03日微创网络(杭州银行外包)前端面试
目录 html 块级元素和行内元素有哪些阴影的几个属性垂直水平居中的实现方式定位的几种方式盒子模型的方式js的数组方法有哪些vue2 vue3 区别vuex哈希路由和浏览器路由的区别浏览器缓存的几个方式react hooks的优势react 组件传值vue 组件传值如何进行性能优化前端监控get post…...
工单分类总结
微调BERT-base模型,构建层次化分类器,Top-3准确率达97.2%,并自动识别出问题的关键类别 1. 具体微调的BERT-base模型是什么模型? BERT-base模型是一个预训练的Transformer模型,包含12个Transformer块、12个自注意头和隐藏大小为768。该模型在大规模文本数据上进行了预训练…...
2025年了,5G还有三个新变化
最近舆论开始讨论5G为什么不火了?5G是不是停滞发展了。 实际上,5G不仅在发展,还迎来了它的升级版5G-A。 在今年西班牙举行的世界移动通信大会上,5G-A就是焦点之一。 被誉为全球通信领域风向标的MWC,汇聚了华为、中兴通…...
区块链交易所平台开发全解析
在数字化飞速发展的今天,区块链技术已成为金融领域的核心驱动力之一。作为数字货币交易的关键平台,区块链交易所的开发不仅涉及复杂的技术环节,还需要兼顾用户体验、安全性、合规性等多个方面。本文将深入探讨区块链交易所平台的开发流程、关…...
hexo+butterfly博客功能完善和美化(四)---博客上传
hexobutterfly博客功能完善和美化(四)—博客上传 这是最后一期讲美化和功能完善了,笔者会陆续把csdn上面的博客转移到我的博客网站上面,大家可以来访问 Darlingの妙妙屋 文章目录 hexobutterfly博客功能完善和美化(…...
源码分析之Leaflet中dom模块DomEvent.DoubleTap的实现原理
概述 DomEvent.DoubleTap模块是Leaflet中用于模拟双击(dbclick)事件的模块,主要解决移动端浏览器对双击事件支持不完善或延迟的问题,同时避免与标签(<label>)关联的表单元素误触发。 源码分析 源码实现如下 DomEvent.DoubleTap的源码实现如下&…...
记录一次,rabbitmq开启stomp插件之后,还是连不上15674端口的问题
原因是装在docker 里面的rabbitmq 没有映射15674端口,需重新删除容器之后重新运行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 1883:1883 -p 15675:15675 rabbitmq:版本号 进入docker容器开启插件 docker exec -it rabbitm…...
git clone项目报错fatal: fetch-pack: invalid index-pack output问题
前情回顾:git项目放在公司服务器上面,克隆等操作需要连接VPN才能操作。由于项目比较大,网速比较慢,克隆项目经常出现fetch-pack: invalid index-pack output。在网上查找各种解决方法。也就这一种有点效果。仅供参考,不…...
【access开发】导入excel 并生成表
hi,大家好呀! 最近天气越来越暖了,在这个春暖花开的季节了,每天心情应该都是美美的,正所谓一年之计在于春,在这个美好的季节,大家一起努力学习学习吧!那我们来看看今天学点啥呢&…...
利用knn算法实现手写数字分类
利用knn算法实现手写数字分类 1.作者介绍2.KNN算法2.1KNN(K-Nearest Neighbors)算法核心思想2.2KNN算法的工作流程2.3优缺点2.4 KNN算法图示介绍 3.实验过程3.1安装所需库3.2 MNIST数据集3.3 导入手写数字图像进行分类3.4 完整代码3.5 实验结果 1.作者介…...
从零开始实现 C++ TinyWebServer 处理请求 HttpRequest类详解
文章目录 HTTP 请求报文HttpRequest 类实现 Init() 函数实现 ParseRequestLine() 函数实现 ParseHeader() 函数实现 ParsePath() 函数实现 ParseBody() 函数实现 ParsePost() 函数实现 ParseFromUrlEncoded() 函数实现 UserVerify() 函数实现 Parse() 函数HttpRequest 代码Http…...
Android开发layer-list
Android开发layer-list 它的用处可以在drawable上进行多图拼接,比如启动页,不想图片被拉伸就这么做。还有做某些线突出来。 示例代码: <?xml version"1.0" encoding"utf-8"?> <layer-list xmlns:android&q…...
如何提升库存系统的高并发和稳定性:算法与设计模式
库存系统是企业运营的核心模块,尤其是在电商、零售和供应链管理中,系统的高并发和稳定性直接影响订单处理的准确性和效率。面对海量订单、复杂的库存管理需求,如何在高并发环境下确保库存数据的准确性和系统的稳定性?本文将从架构…...
关于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少
以下是神经网络中常见的几种模型的简要介绍: 1. CNN (Convolutional Neural Network, 卷积神经网络) 用途: 主要用于图像处理和计算机视觉任务。特点: 通过卷积核提取局部特征,具有平移不变性,能够有效处理高维数据(如图像…...
设计模式之装饰器模式
装饰器模式(Decorator)依然是我们设计模式中的结构型模式,其中的构造思想仍然是对多个类进行组合使用,以达成系统调用实现指定功能的设计模式。装饰器模式不论在我们日常开发过程中还是在我们提升技术阅读源码过程中都是比较常见的,但是整体学…...