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;}}}
}

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

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

相关文章

Unity 使用 Protobuf(Pb2)二进制数据全流程工具详解

前言 在Unity游戏开发中&#xff0c;高效、快速、安全地读取配置数据是一项重要需求。本文介绍一种完整的解决方案——使用Protobuf二进制格式&#xff08;Pb2&#xff09;存储和读取游戏数据&#xff0c;并详细分享实现全流程的Unity工具。 一、技术流程概览 实现Unity读取…

MySQL-----视图与索引

目录 视图 1.视图 2.操作 11.索引 1.定义 2.优缺点: 3.分类 4.索引的设计原则 5.索引的使用 作业 视图 1.视图 ❓如果需要在原表中隐藏部分字段时&#xff0c;怎么办&#xff1f; 视图 &#x1f4d6;视图: 是一个没有存储任何数据的表&#xff0c;可以对其CRUD视图…

stm32-IIC

i^2c,iiCBus,集成电路总线&#xff0c;同步串行半双工通信总线方式 sck:时钟同步信号 SDA:发送数据 GND&#xff1a;接地 通信对象&#xff1a;芯片与芯片 主从应答方式&#xff1a; SDA&#xff1a;数据总线 SCL&#xff1a;时钟总线 在硬件设计中&#xff1a; 上拉电阻&#…

`chromadb` 是什么

chromadb 是什么 chromadb 是一个开源的向量数据库,它专门用于存储、索引和查询向量数据。在处理自然语言处理(NLP)、计算机视觉等领域的任务时,通常会将文本、图像等数据转换为向量表示,而 chromadb 可以高效地管理这些向量,帮助开发者快速找到与查询向量最相似的向量数…

机器视觉工程师如何看机器视觉展会,有些机器视觉兄弟参加机器视觉展会,真的是参加了?重在参与?

作为机器视觉工程师,参加机器视觉展会不仅是了解行业前沿技术的窗口,也是拓展专业网络、寻找解决方案的重要机会。以下是结合展会信息和工程师视角的综合建议: 一、聚焦技术趋势与创新应用 参与技术论坛与研讨会 展会同期的技术论坛是获取行业洞见的核心渠道。例如: 上海展…

Centos操作系统安装及优化

Centos操作系统安装及优化 零、环境概述 主机名 centos版本 cpu 内存 Vmware版本 ip地址 test CentOS Linux release 7.6.1810 (Core) 2C 2G 15.5.1 10.0.0.10 一、介质下载 1、7.6版本下载 CentOS7.6标准版下载链接: https://archive.kernel.org/centos-vault/7.6.1810/i…

Edge浏览器如何默认启动某个工作区 / 为工作区添加快捷方式

Edge浏览器的工作区确实非常好用&#xff0c;可以多端同步标签页。但是打开Edge时默认是没有在工作区的状态&#xff0c;这个状态下的标签页可能会丢失。所以我研究了一下&#xff0c;如何点击快捷方式时自动启动一个工作区&#xff0c;方法如下&#xff1a; 先找到WorkspaceCa…

mac上安装nvm及nvm的基本语法使用!!

种一棵树&#xff0c;最好是十年前&#xff0c;其次是现在&#xff01;想要改变&#xff0c;从此刻开始&#xff0c;一切都不晚&#xff01; 目录 nvm是什么&#xff1f;前提条件&#xff1a;安装homebrew如果系统已经有node版本&#xff1a;在mac上安装nvm&#xff1a;用nvm安…

CPP中的numeric库中的accumulate求和函数说明

导入 accumulate函数位于numeric库中&#xff0c;作用是对数组或向量求和 // 设定初始值为0&#xff0c;从dp[0]到dp[n-1]进行累加 accumulate(dp,dpn,0);注意&#xff1a;这里的第二个参数是开区间&#xff0c;所以求和时不包含dp[n]这一位

Qt 高效读写JSON文件,玩转QJsonDocument与QJsonObject

一、前言 JSON作为轻量级的数据交换格式&#xff0c;已成为开发者必备技能。Qt框架为JSON处理提供了完整的解决方案&#xff0c;通过QJsonDocument、QJsonObject和QJsonArray三大核心类&#xff0c;轻松实现数据的序列化与反序列化。 JSON vs INI 特性JSONINI数据结构支持嵌…

Kubernetes(k8s)-Pod亲和性(Affinity)和反亲和性(Anti-affinity)

作者介绍&#xff1a;简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Docker基本情况&#xff0c;目前在规模较大的容器集群基本都是Kubernetes&#xff0c;但是K…

ESP32-C3物联网方案,智能设备创新升级,无线交互控制通信应用

在物联网技术迅猛发展的今天&#xff0c;各类智能设备如雨后春笋般涌现&#xff0c;深度融入我们生活与工作的各个角落&#xff0c;物联网正以一种前所未有的速度改变着我们的世界。 想象一下&#xff0c;清晨&#xff0c;当第一缕阳光洒进房间&#xff0c;智能窗帘自动缓缓拉…

Python自动化测试 之 DrissionPage 的下载、安装、基本使用详解

Python自动化测试 之 DrissionPage 使用详解 &#x1f3e1;前言&#xff1a;一、☀️DrissionPage的基本概述二、 &#x1f5fa;️环境安装2.1 ✅️️运行环境2.2 ✅️️一键安装 三、&#x1f5fa;️快速入门3.1 页面类&#x1f6f0;️ChromiumPage&#x1f6eb; SessionPage&…

【操作系统安全】任务3:Linux 网络安全实战命令手册

目录 一、基础网络信息获取 1. 网络接口配置 2. 路由表管理 3. 服务端口监控 二、网络监控与分析 1. 实时流量监控 2. 数据包捕获 3. 网络协议分析 三、渗透测试工具集 1. 端口扫描 2. 漏洞利用 3. 密码破解 四、日志审计与分析 1. 系统日志处理 2. 入侵检测 3…

社群经济4.0时代:开源链动模式与AI技术驱动的电商生态重构

摘要&#xff1a;在Web3.0技术浪潮与私域流量红利的双重驱动下&#xff0c;电商行业正经历从"流量收割"到"用户深耕"的范式转变。本文基于社群经济理论框架&#xff0c;结合"开源链动21模式"、AI智能名片、S2B2C商城小程序源码等创新工具&#x…

从技术架构和生态考虑,不是单纯的配置优化,还有哪些方式可以提高spark的计算性能

从技术架构和生态系统层面提升Spark的计算性能&#xff0c;可采取以下核心策略&#xff1a; 一、计算模型重构与执行引擎升级 1. 弹性分布式数据集&#xff08;RDD&#xff09;的血统优化 通过RDD的Lineage&#xff08;血统&#xff09;机制实现容错时&#xff0c;采用增量式…

AI对软件工程(software engineering)的影响在哪些方面?

AI对软件工程&#xff08;software engineering&#xff09;的影响是全方位且深远的&#xff0c;它不仅改变了传统开发流程&#xff0c;还重新定义了工程师的角色和软件系统的构建方式。以下是AI影响软件工程的核心维度&#xff1a; 一、开发流程的智能化重构 需求工程革命 • …

数据库取证分析

目录 一.多表关联 1.一对多联结 2.子查询 二.数据库示例分析 1.多表关联 三.选择SQL分析的原因 四.数据库概述 五.SQL语言 一.多表关联 1.一对多联结 2.子查询 二.数据库示例分析 1.多表关联 三.选择SQL分析的原因 四.数据库概述 五.SQL语言 1.select 字段

Docker 部署 Graylog 日志管理系统

Docker 部署 Graylog 日志管理系统 前言一、准备工作二、Docker Compose 配置三、启动 Graylog 服务四、访问 Graylog Web 界面总结 前言 Graylog 是一个开源的日志管理平台&#xff0c;专为实时日志收集、分析和可视化设计。它支持强大的搜索功能&#xff0c;并且与 Elastics…

Matlab2024a免费版下载教程

Matlab是一个高性能的数学计算与仿真软件&#xff0c;广泛应用于科学计算、数据分析、算法开发以及工程绘图等多个领域。它提供了强大的矩阵运算能力、丰富的内置函数库以及灵活的编程环境&#xff0c;使得用户能够高效地解决复杂的数学问题。本文&#xff0c;我将为大家详细介…