当前位置: 首页 > news >正文

【QT 读取JSON】 深入浅出 使用QT内置的QJson模块解析Json文件 匠心之作

目录

  • 0 引言
  • 1 Json数据分析
  • 2 解析Json数据

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:QT专栏
  • 💥 标题:【QT 读取JSON】 使用QT内置的QJson模块解析Json文件
  • ❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

在项目开发过程中,经常会遇到读写Json文件的需求,掌握Json文件的操作是基础中的基础。

1 Json数据分析

要读取的Json数据格式如下:

[{"name":"ggr","info":{"age":21,"height":174}},{"name":"lbw","info":{"age":21,"height":174}}
]

接下来以QJson模块的角度,来解析这个Json数据

整个文件数据可以转换为 QJsonDocument 类型,其中有 “[ ]” 方括号、 "{ }“花括号、” : "冒号。

  • 被 “[ ]” 方括号包围的数据是QJsonArray数组类型
  • 被 "{ }"花括号包围的数据是QJsonObject对象类型
  • " : "冒号两侧的分别是Key和Value(key : value),冒号左右有空格不影响数据读取。

先了解四个重要的类型

  • QJsonDocument类型,指的是整个Json数据。
  • QJsonArray数组类型的元素QJsonValue类型。
  • QJsonObject类型的元素键值对,也就是 Key: Value 类型。Key字符串类型,Value 的类型是 QJsonValue
  • QJsonValue类型 可以转换成 QJsonObject 类型、int型、double型、QString类型、QJsonArray类型等基础数据类型。

总结:QJsonDocument 可以转换为 QJsonArray 或QJsonObjec t类型。然后 QJsonArray 中的元素和 QJsonObject 中键值对的值的类型都是 QJsonValue 类型。QJsonValue 类型可以转换成QJsonArray、QJsonObject、int、double、QString、bool等类型。(相当于闭环了,设计的非常巧妙)

2 解析Json数据

  1. 首先添加一些头文件
#include <QFile>				// 用于打开文件
#include <QJsonParseError>		// 返回错误信息
#include <QJsonArray>			// Json数据对象
#include <QJsonDocument>		// Json文档对象
#include <QJsonObject>			// 普通Json对象
#include <QDebug>				// 打印数据
  1. 新建一个函数解析Json数据
bool ReadJson::praseJsonFile(const QString &sJsonPathFn)
{//---------------------------------------------------------------------------------------------//1.读取磁盘中的文件QFile file( sJsonPathFn );if (!file.open(QIODevice::ReadOnly)) return false;QJsonParseError result;QJsonDocument   root_Doc = QJsonDocument::fromJson(file.readAll(), &result);    // 将文件数据格式化为JsonDocument对象if( result.error != QJsonParseError::NoError ) return false;                    // 数据格式错误就返回//---------------------------------------------------------------------------------------------QJsonArray roots = root_Doc.array();   // 将JsonDocument对象转换为QJsonArray类型//---------------------------------------------------------------------------------------------//2.遍历QJsonArray数组for (int i=0; i<roots.size(); i++){QJsonObject root = roots.at(i).toObject();// 读取name和info的值QString     name    = root.value("name").toString();QJsonObject info    = root.value("info").toObject();// 读取info对象中age和height的值int         age     = info.value("age").toInt();int         height  = info.value("height").toInt();// 打印读取的数据qDebug() << "name = " << name;qDebug() << "info.age = " << age;qDebug() << "info.height = " << height;}//---------------------------------------------------------------------------------------------return true;
}

其实只要掌握关键的函数,就能看懂上面的代码

  • readAll()
    这是将文本文件读取成 QByteArray 类型的函数
  • QJsonDocument的fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR)函数
    这是将 QByteArray 类型的字符数组转换成 QJsonDocument 类型的函数。
  • QJsonDocument 有两个函数,分别是 object() 和 array() 函数,它们可以将自己转换成 QJsonArray 类型或者 QJsonObject 类型
    使用 object() 还是 array() 函数就看Json数据最开头的是 方括号 还是 花括号 ,本文数据是方括号开头,所以使用的是 array() 函数。
  • QJsonArrayat(int index) 函数,用于访问数组索引等于 index 的元素。
  • QJsonObjectvalue(const QString &key) 函数,用于读取花括号中的键值对的值。根据key的值,读取value的值。
    该函数返回的是 QJsonValue 类型
  • QJsonValue 中的 toObject、toString、toInt、toDouble、toBool、toArray 函数用于将 QJsonValue 装换为 QJsonObject、QString、int、double、bool、QJsonArray 类型

相关文章:

【QT 读取JSON】 深入浅出 使用QT内置的QJson模块解析Json文件 匠心之作

目录 0 引言1 Json数据分析2 解析Json数据 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;QT专栏&#x1f4a5; 标题&#xff1a;【QT 读取JSON】 使用QT内置的QJson模块解析Json文件❣️ 寄语&#xff1a;人生的意义或许可以发挥自己全部的潜力&…...

初识javaweb2 tomcat

如果是tomcat启动成功却无法通过localhost:8080进入页面&#xff0c;先去查看是否是端口号被占用&#xff0c; 再用命令中断占用的进程&#xff0c;如果简单的命令窗口无法中断&#xff0c;切换到管理员身份运行即可 netstat -ano|findstr "8080" 查看那个进程占用了…...

使用OPENROWSET :在一个数据库中查询另一个数据库的数据

当你需要在一个数据库中查询另一个数据库的数据时&#xff0c;SQL Server提供了多种方法来实现这一目标。一种常见的方法是使用链接服务器&#xff08;Linked Server&#xff09;&#xff0c;另一种方法是使用 OPENROWSET 函数。本篇博客将重点介绍如何使用 OPENROWSET 函数在当…...

基于STM32设计的智慧农业管理系统(ESP8266+腾讯云微信小程序)

一、项目介绍 基于STM32设计的智慧农业控制系统(ESP8266+腾讯云微信小程序) 1.1 项目背景 随着人们对食品安全和生态环境的日益重视,智慧农业逐渐成为一个备受关注的领域。智能化管理可以提高农业生产效率,减少资源浪费,改善生态环境。因此,基于物联网技术的智慧农业管理系…...

Flutter视图原理之三棵树的建立过程

目录 三棵树的关系树的构建过程1.updateChild函数&#xff08;element的复用&#xff09;2.inflateWidget函数3.mount函数3.1 componentElement的实现3.2 RenderObjectElement的实现3.2.1 attachRenderObject函数 4.performRebuild函数 总结三棵树创建流程 三棵树的关系 Flutt…...

详细解析冒泡排序,JS如何基本实现的。

目录 冒泡排序是什么: 使用冒泡排序是为了什么: DEMO示例: 冒泡排序是什么: 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的比较排序算法&#xff0c;它通过多次遍历待排序的元素&#xff0c;比较相邻元素的大小&#xff0c;如果它们的顺序不正确就交换它们&…...

如何消除CSDN博文代码中自动添加的行号

哪里有自定义目录标题 编写CSDN博文&#xff0c;使用代码块的linux命令行&#xff0c;预览时没有代码行号&#xff0c;但发布文章后自动添加了行号。 git clone https://github.com/mikel-brostrom/yolo_tracking.git cd yolo_tracking pip install -v -e .为什么预览和发布的…...

定制效果在线定制印刷系统源码 DIY在线定制系统源码 云印刷定制系统源码手机、PC端实时互通

支持各类产品的在线定制&#xff0c;无论是水杯雨伞U盘还是T恤衬衫四件套&#xff0c;均可轻松进行定制 独创制作间概念&#xff0c;同一套模板可以重复对应不同制作间 手机、PC端实时互通&#xff0c;客户可通过任意途径进行图片上传、编辑&#xff0c;一方修改另一方即时可见…...

算法|每日一题|同积元组|哈希统计

1726.同积元组 原题地址&#xff1a; 力扣每日一题&#xff1a;同积元组 给你一个由 不同 正整数组成的数组 nums &#xff0c;请你返回满足 a * b c * d 的元组 (a, b, c, d) 的数量。其中 a、b、c 和 d 都是 nums 中的元素&#xff0c;且 a ! b ! c ! d 。 class Solution …...

最新AI创作系统ChatGPT网站H5源码V2.6.4+搭建部署教程+支持GPT4.0+支持ai绘画(Midjourney)/支持Prompt预设应用

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…...

最新!两步 永久禁止谷歌浏览器 Google Chrome 自动更新

先放效果图&#xff1a; CSDN这个问题最火的大哥的用了没用 像他这样连浏览器都打不开 为什么要禁止chrome自动更新 看到很多搞笑的大哥&#xff0c;说为啥要禁止&#xff1b; 我觉得最大的原因就是chromedriver跟不上chrome的自动更新&#xff0c;导致我们做selenium爬虫的…...

在Java中线程和进程的区别

在Java中&#xff0c;线程和进程的区别与一般的操作系统环境下类似&#xff0c;但在Java语言层面上也有一些特点。下面是在Java中线程和进程的区别&#xff1a; 定义&#xff1a;在Java中&#xff0c;进程是指一个正在运行的应用程序实例&#xff0c;而线程是进程中的执行单元。…...

【高危安全通告】Oracle 10月月度安全漏洞预警

近日&#xff0c;安全狗应急响应中心关注到Oracle官方发布安全公告&#xff0c;共披露出在Oracle Weblogic中存在的6个高危漏洞。 漏洞描述 CVE-2023-22069&#xff1a;Oracle Weblogic 远程代码执行漏洞 Oracle WebLogic Server存在远程代码执行漏洞&#xff0c;该漏洞的CVS…...

卷王问卷考试系统SurveyKing,开源调查问卷和考试系统源码

卷王问卷考试系统/SurveyKing是一个功能最强大的开源调查问卷和考试系统&#xff0c;可以快速部署&#xff0c;并适用于各行业。该系统提供了在线表单设计、数据收集、统计和分析等功能&#xff0c;支持20多种题型&#xff0c;多种创建问卷方式和多种问卷设置。 无论您是需要进…...

uniapp开发微信小程序,webview内嵌h5,h5打开pdf地址,解决方案

根据公司要求&#xff0c;让我写一个h5&#xff0c;后续会嵌入到合作公司的微信小程序的webview中&#xff0c;如果是自己公司微信小程序&#xff0c;可以采取先下载下来pdf&#xff0c;然后通过wx.openDocument&#xff0c;进行单纯的预览操作&#xff0c;这个可以根据这个老哥…...

Swift使用Embassy库进行数据采集:热点新闻自动生成器

概述 爬虫程序是一种可以自动从网页上抓取数据的软件。爬虫程序可以用于各种目的&#xff0c;例如搜索引擎、数据分析、内容聚合等。本文将介绍如何使用Swift语言和Embassy库编写一个简单的爬虫程序&#xff0c;该程序可以从新闻网站上采集热点信息&#xff0c;并生成一个简单…...

【AIGC核心技术剖析】改进视频修复的传播和变压器(动态滤除环境中的物体)

基于流的传播和时空变压器是视频修复&#xff08;VI&#xff09;中的两种主流机制。尽管这些组件有效&#xff0c;但它们仍然受到一些影响其性能的限制。以前基于传播的方法在图像域或特征域中单独执行。与学习隔离的全局图像传播可能会由于光流不准确而导致空间错位。此外&…...

Win系统VMware虚拟机安装配置(二)

系统的安装得分两个步骤&#xff0c;第一步得配置一台电脑&#xff0c;选配 cpu&#xff0c;内存&#xff0c;磁盘&#xff0c;网卡等硬 件。第二步才是安装系统。 一、配置电脑 1、 进入 VMware 双击 VMware 图标&#xff0c;看到如下界面。 2、 自定义新的虚拟机 3、…...

基于枚举实现的观察者模式

文章目录 前言一、观察者1.定义一个观察者接口2.察者接口具体实现类 二、主题1.定义一个主题接口2.主题接口具体实现类 三、枚举维护观察者1.定义枚举类维护观察者 四、观察者模式测试1.定义观察者模式测试接口2.观察者模式测试运行结果 前言 本文介绍使用枚举的方式实现的观察…...

基于神经网络的图像识别研究

基于神经网络的图像识别是计算机视觉领域的一个热门研究方向&#xff0c;尤其是深度学习技术的兴起。以下是一些与基于神经网络的图像识别相关的关键主题和研究方向&#xff1a; 1. 卷积神经网络&#xff08;CNN&#xff09;&#xff1a; CNN是图像识别领域最重要的神经网络之…...

semi-utils:批量添加专业水印的智能解决方案

semi-utils&#xff1a;批量添加专业水印的智能解决方案 【免费下载链接】semi-utils 一个批量添加相机机型和拍摄参数的工具&#xff0c;后续「可能」添加其他功能。 项目地址: https://gitcode.com/gh_mirrors/se/semi-utils 作为一名摄影爱好者或专业摄影师&#xff…...

CORS跨域问题终极指南:从XMLHttpRequest到Nginx代理的完整解决方案

CORS跨域问题终极指南&#xff1a;从XMLHttpRequest到Nginx代理的完整解决方案 第一次在控制台看到那个鲜红的CORS错误时&#xff0c;我正为一个紧急项目赶工。凌晨三点的咖啡已经凉了&#xff0c;而浏览器的报错信息像一堵墙横在我和 deadline 之间。相信每个全栈开发者都经历…...

Phi-4-mini-reasoning部署案例:科研团队构建内部逻辑验证辅助工具链

Phi-4-mini-reasoning部署案例&#xff1a;科研团队构建内部逻辑验证辅助工具链 1. 项目背景与模型介绍 Phi-4-mini-reasoning 是一款专注于推理任务的文本生成模型&#xff0c;特别适合处理数学题、逻辑题、多步分析和简洁结论输出等场景。与通用聊天模型不同&#xff0c;它…...

GTE-Pro语义检索系统国际化支持:中英混合Query与多语言文档联合检索

GTE-Pro语义检索系统国际化支持&#xff1a;中英混合Query与多语言文档联合检索 1. 引言&#xff1a;当搜索不再受限于语言 想象一下&#xff0c;你在一家跨国公司的技术文档库里查找资料。你的脑海里蹦出一个问题&#xff1a;“How to configure the 负载均衡器 for high av…...

DRASTIC:面向任务感知闭环触觉互联网应用中6G网络切片的动态资源分配框架

大家读完觉得有帮助记得关注和 点赞&#xff01;&#xff01;&#xff01;摘要 本文提出一种新颖的学习驱动的带宽优化框架&#xff0c;称为 DRASTIC&#xff08;任务感知闭环触觉互联网应用中用于切片的动态资源分配&#xff09;。该框架在支持增强型移动宽带和高可靠低延迟通…...

MarkEdit 文本编码处理技术深度解析

MarkEdit 文本编码处理技术深度解析 【免费下载链接】MarkEdit Just like TextEdit on Mac but dedicated to Markdown. 项目地址: https://gitcode.com/gh_mirrors/ma/MarkEdit MarkEdit 是一款专为 Markdown 设计的文本编辑器&#xff0c;如同 Mac 上的 TextEdit 但专…...

从零到一:手把手教你用CANoe和Python脚本实现UDS诊断自动化测试(附完整代码)

从零到一&#xff1a;手把手教你用CANoe和Python脚本实现UDS诊断自动化测试&#xff08;附完整代码&#xff09; 在汽车电子测试领域&#xff0c;UDS&#xff08;Unified Diagnostic Services&#xff09;诊断协议的自动化测试已经成为提升开发效率的关键环节。传统的手动测试方…...

OpenClaw自动化简历投递:Qwen3-14B智能匹配职位要求

OpenClaw自动化简历投递&#xff1a;Qwen3-14B智能匹配职位要求 1. 为什么需要自动化简历投递&#xff1f; 去年秋天&#xff0c;当我开始寻找新的工作机会时&#xff0c;面对数百个招聘岗位&#xff0c;我陷入了"海投困境"&#xff1a;每份简历都需要根据JD(职位描…...

OpenClaw对话式编程:Qwen3-4B模型解释代码与生成示例

OpenClaw对话式编程&#xff1a;Qwen3-4B模型解释代码与生成示例 1. 为什么需要对话式编程&#xff1f; 作为一名长期与代码打交道的开发者&#xff0c;我经常遇到这样的困境&#xff1a;面对一段复杂代码时&#xff0c;需要反复查阅文档&#xff1b;学习新框架时&#xff0c…...

小红书数据采集实战:5个Python技巧让爬虫更智能

小红书数据采集实战&#xff1a;5个Python技巧让爬虫更智能 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 在小红书这个拥有数亿用户的社交电商平台上&#xff0c;海量的用…...