当前位置: 首页 > 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…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...