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

【Qt之json文件】json文件介绍及相关读写类介绍、示例

JSON介绍

JSON(JavaScript Object Notation)是一种源自Javascript的编码对象数据的轻量级的数据交换格式,易于理解和编写,JSON但现在已广泛用作互联网上的数据交换格式。
Qt提供了处理JSON数据的支持。Qt中的JSON支持提供了一个易于使用的C++ API,用于解析、修改和保存JSON数据。它还包含支持将这种数据以二进制格式保存的功能,这种格式可以直接“映射”并且非常快速地访问。有关JSON数据格式的更多详细信息,可以在json.org和RFC-7159中找到。

JSON格式

JSON格式主要有以下三种:

对象格式(键值对):JSON对象以“{}”括起来,内部由0个或多个以英文逗号分隔的“key:value”对构成。示例:

json
{  "name": "John",  "age": 30,  "city": "New York"  
}

数组格式:JSON数组以“[]”括起来,内部由0个或多个以英文逗号分隔的值列表组成。示例:

json
[  "apple",  "banana",  "cherry"  
]

嵌套格式:JSON对象和数组可以互相嵌套,形成更复杂的数据结构。示例:

json
{  "name": "John",  "age": 30,  "city": "New York",  "fruits": [  "apple",  "banana",  "cherry"  ]  
}

读写类

在Qt中,可以使用QJsonDocument、QJsonObject、QJsonArray等类来读写JSON文件。

  1. QJsonDocument:用于解析JSON数据和生成JSON文档。
  2. QJsonObject:用于表示JSON对象。
  3. QJsonArray:用于表示JSON数组。

示例

以下是一个示例,实现从JSON文件中读取数据:
比如json文件是以下格式:
test.json

{"name": "John","age": 30,"address": {"street": "123 Main St","city": "New York","state": "NY"}
}

代码

#include <QCoreApplication>
#include <QFile>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QFile file(":/test.json"); // 从资源文件中读取JSON文件file.open(QIODevice::ReadOnly | QIODevice::Text); // 以只读文本方式打开文件QString content = QString(file.readAll());file.close(); // 关闭文件QJsonDocument jsonDoc = QJsonDocument::fromJson(content.toUtf8());QJsonObject jsonObj = jsonDoc.object();qDebug() << jsonObj["name"].toString(); // 输出name属性的值return a.exec();
}

上述代码从资源文件中读取JSON文件,然后解析JSON数据并将其转换为QJsonObject对象。可以通过[“属性名”]的方式来访问JSON对象中的属性值。

QJsonObject

QJsonObject对象也可以通过以下方式添加属性值:

QJsonObject jsonObj;
jsonObj["name"] = "John";
jsonObj["age"] = 30;

使用QJsonDocument对象将QJsonObject对象转换为JSON字符串

QJsonDocument jsonDoc(jsonObj);
QString jsonString = jsonDoc.toJson();

将QJsonObject对象转换为JSON字符串,并将其存储在QString对象中。

将内容写入json

QFile file("test.json");
file.open(QIODevice::WriteOnly | QIODevice::Text); // 以只写文本方式打开文件
file.write(jsonString.toUtf8());
file.close(); // 关闭文件

综上所述,Qt提供了方便易用的类来读写JSON文件,使得处理JSON数据变得容易。

相关文章:

【Qt之json文件】json文件介绍及相关读写类介绍、示例

JSON介绍 JSON&#xff08;JavaScript Object Notation&#xff09;是一种源自Javascript的编码对象数据的轻量级的数据交换格式&#xff0c;易于理解和编写&#xff0c;JSON但现在已广泛用作互联网上的数据交换格式。 Qt提供了处理JSON数据的支持。Qt中的JSON支持提供了一个易…...

arp 隔离

目录 问题查找解决方式参考 问题 linux 在使用双网卡系统时&#xff0c;当这两个不同网段的网口接到同一个交换机上&#xff0c;会出现 eth0 的 arp 请求&#xff0c;会在 eth1 上收到并回复&#xff0c;相当于自己检测到了自己的 ip。 查找 linux 的底层&#xff0c;默认情…...

数据结构与算法(文章链接汇总)

数据结构与算法&#xff08;一&#xff09;&#xff1a;概述与复杂度分析 数据结构与算法&#xff08;二&#xff09;&#xff1a;数组与链表 数据结构与算法&#xff08;三&#xff09;&#xff1a;栈与队列 数据结构与算法&#xff08;四&#xff09;&#xff1a;哈希表 数据…...

代码随想录算法训练营第五十九天 | 647. 回文子串、516.最长回文子序列

647. 回文子串 链接&#xff1a; 代码随想录 &#xff08;1&#xff09;代码 516.最长回文子序列 链接&#xff1a; 代码随想录 &#xff08;1&#xff09;代码...

非关系型数据库-Redis

一、缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度&#xff0c;在中间对速度较慢的一方起到加速作用&#xff0c;比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据&#xff0c;内存是保存CPU经常访问硬盘的数据&#xff0c;而且硬盘也有大小不一的缓存…...

HTML基本讲解与使用

目录 html的由来: 什么是HTML: HTML的主要特点: HTML文档结构: HTML元素: HTML元素属性&#xff1a; 文本和格式化&#xff1a; 链接和图像&#xff1a; 列表&#xff1a; 表格&#xff1a; 表单&#xff1a; 嵌套和结构&#xff1a; HTML注释&#xff1a; 样式…...

linux uname详解 -s -r -a 查看内核版本

简介 uname命令用于显示操作系统信息&#xff0c;例如内核版本、主机名、处理器类型等 uname常用的有-a&#xff0c;-r&#xff0c;-rs 参数 --help  显示帮助。-a 或--all 显示全部信息&#xff0c;包括内核名、主机名、内核版本、处理器类型和硬件架构等…...

Linux常用命令——cmp命令

在线Linux命令查询工具 cmp 比较两个文件是否有差异 补充说明 cmp命令用来比较两个文件是否有差异。当相互比较的两个文件完全一样时&#xff0c;则该指令不会显示任何信息。若发现有差异&#xff0c;预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是…...

C语言之排序

1.冒泡排序 冒泡排序就不多说了&#xff0c;只需要两层循环嵌套&#xff0c;两两比较确定相对正确的顺序即可。 2.插入排序 插入排序的思想就是每一次向后寻找一个再将其与前面有序的部分进行对比&#xff0c;寻找合适位置插入。 这里关键要避免让前移超出目前读取的数字&…...

GitHub-使用 Git工具 创建密钥id_rsa.pub

快速导航 步骤1 打开Git Bash步骤2 输入指令【ssh-keygen】步骤3 打开创建的公钥文件步骤4 复制其中所有内容步骤5 打开GitHub中的Setting界面步骤6 添加SSH keys 步骤1 打开Git Bash 打开Git Bash 工具 步骤2 输入指令【ssh-keygen】 输入指令【ssh-keygen】&#xff0c;并…...

C++多重、多层、分层继承

在本文中&#xff0c;您将学习C 编程中的不同继承模型&#xff1a;带有示例的多继承&#xff0c;多层和分层继承。 继承是面向对象编程语言的核心功能之一。它允许软件开发人员从现有的类派生一个新的类。派生类继承基类&#xff08;现有类&#xff09;的功能。C 编程中有多种…...

ThingsBoard的数据分析-自定义节点来订阅kafka stream的消息

1、概述 在ThingsBoard官方文档中有说明:ThingsBoard 规则引擎支持对传入遥测数据的基本分析,例如阈值交叉。规则引擎背后的想法是提供基于设备属性或数据本身将数据从物联网设备路由到不同插件的功能。 然而,大多数现实生活中的用例也需要高级分析的支持:机器学习、预测分…...

Python WSGI HTTP Server - Gunicorn

基本概念 Gunicorn&#xff0c;也称为“Green Unicorn”&#xff0c;是一个Python WSGI HTTP Server&#xff0c;用于运行Python Web应用程序。WSGI&#xff08;Web Server Gateway Interface&#xff09;是Python应用程序和Web服务器之间的一个接口&#xff0c;允许应用程序和…...

[论文笔记]GPT-2

引言 今天继续GPT系列论文, 这次是Language Models are Unsupervised Multitask Learners,即GPT-2,中文题目的意思是 语言模型是无监督多任务学习器。 自然语言任务,比如问答、机器翻译、阅读理解和摘要,是在任务相关数据集上利用监督学习的典型方法。作者展示了语言模型…...

第十三届蓝桥杯模拟赛第三期

A.填空题 问题描述 请问十六进制数 2021ABCD 对应的十进制是多少&#xff1f; 参考答案 539077581 import java.math.*; public class Main {public static void main(String[] args) {String strnew BigInteger("2021ABCD",16).toString(10);System.out.printl…...

代碼隨想錄算法訓練營|第四十四天|01背包问题 二维、01背包问题 一维、416. 分割等和子集。刷题心得(c++)

目录 01背包問題 - DP二維數組 01 背包問題描述 暴力解 動態規劃 確認DP數組以及下標的含意 確定遞推公式 01背包问题 一维 一维DP 数組(滾動数組) 動態規劃五部曲 定義DP数組以及其下標含意 遞推公式 初始化 遍歷順序 讀題 416. 分割等和子集 自己看到题目的第…...

【算法训练-回溯算法 零】回溯算法解题框架

抽象地说&#xff0c;解决一个回溯问题&#xff0c;实际上就是遍历一棵决策树的过程&#xff0c;树的每个叶子节点存放着一个合法答案。你把整棵树遍历一遍&#xff0c;把叶子节点上的答案都收集起来&#xff0c;就能得到所有的合法答案。站在回溯树的一个节点上&#xff0c;你…...

GAN.py

原代码地址&#xff1a;github.com/zqhang/MTGFLOW 目录 def ConvEncoder() def ConvDecoder() class CNNAE(torch.nn.Module): class R_Net(torch.nn.Module): class D_Net(torch.nn.Module): def R_Loss&#xff08;&#xff09; def D_Loss&#xff08;&#xff09…...

C语言动态内存管理

1.为什么要动态内存分配&#xff1f; int val 20; int a[10]{0};上面我们声明并定义了一个大小为4字节的整型变量&#xff0c;一个容量为10*4字节的整型数组。 开辟方式:我们在栈上开辟。 开辟空间的方式有两个特点&#xff1a; 1. 空间开辟 大小是固定 的。 2. 数组在申明…...

小红书商品详情API接口(商品详情页面数据接口)

小红书商品详情API接口&#xff08;商品详情页面数据接口 小红书商品详情API接口&#xff08;商品详情页面数据接口&#xff09;代码对接如下&#xff1a; 1.公共参数 名称类型必须描述keystring是get请求方式拼接在url中,点击获取api_namestring是 api接口名称cachestrin…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...