qt 读写json格式的文件应用举例 工具函数

1.概要

要做一个json的读取功能,先做一个原型,然后在实际的工程中套用

2.代码

2.1 main.cpp

#include "widget.h"
#include "inijsonparams.h"#include <QApplication>int main(int argc, char *argv[])
{IniJsonParams iniJsonParams;//iniJsonParams.save();iniJsonParams.load();//QApplication a(argc, argv);//Widget w;//w.show();//return a.exec();qDebug() << "Hello, World!";return 0;
}

2.2 datamod.h

#ifndef DATAMOD_H
#define DATAMOD_H
#include <QString>
#include <QList>class DataMod
{
public:DataMod();QString name;int age;QString email;QList<QString> hobbies;void myView();
};#endif // DATAMOD_H

2.3 datamod.cpp

#include "datamod.h"
#include <QDebug>DataMod::DataMod() {}void DataMod::myView(){qDebug() << "Hello, World!";qDebug() << "name:"<<this->name;qDebug() << "age:"<<this->age;qDebug() << "email:"<<this->email;for(int i=0;i<this->hobbies.count();i++){qDebug() << "hobbies"<<i<<":"<<this->hobbies[i];}
}

2.4 inijsonparams.h

#ifndef INIJSONPARAMS_H
#define INIJSONPARAMS_Hclass IniJsonParams
{
public:IniJsonParams();
//private:void load();void save();
};#endif // INIJSONPARAMS_H

2.5 inijsonparams.cpp

#include "inijsonparams.h"
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
#include "datamod.h"IniJsonParams::IniJsonParams() {}void IniJsonParams::load(){DataMod dm;QString fileName="test.txt";QFile file(fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){//输出logreturn;}// 读取文件内容QByteArray jsonData = file.readAll();QJsonParseError jsonError;QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &jsonError);QJsonObject obj = jsonDoc.object();QJsonObject us = obj["user"].toObject();dm.name = us["name"].toString();dm.age = us["age"].toInt();dm.email = us["email"].toString();QJsonArray array = us["hobbies"].toArray();for(int i=0;i<array.count();i++){dm.hobbies.append(array[i].toString());}dm.myView();}void IniJsonParams::save(){QString fileName="test.txt";// 创建一个 QJsonObjectQJsonObject jsonObject;QJsonObject user;user.insert("name","John Doe");user.insert("age",30);user.insert("email","johndoe@example.com");QJsonArray hobbiesArray;hobbiesArray.append("hiking");hobbiesArray.append("reading");user.insert("hobbies", hobbiesArray);jsonObject.insert("user",user);//jsonObject["user"].toObject().insert("hobbies", hobbiesArray);// 将 QJsonObject 转换为 QJsonDocumentQJsonDocument jsonDoc(jsonObject);// 写入文件QFile file(fileName);if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {file.write(jsonDoc.toJson(QJsonDocument::Indented)); // 缩进格式化输出file.close();}
}

3.运行结果

3.1 读的结果

Hello, World!
name: "John Doe"
age: 30
email: "johndoe@example.com"
hobbies 0 : "hiking"
hobbies 1 : "reading"
Hello, World!

3.2 写的结果(test.txt)

{"user": {"age": 30,"email": "johndoe@example.com","hobbies": ["hiking","reading"],"name": "John Doe"}
}

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

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

相关文章

华为MDC开发者调试工具以及配置使用介绍

MDC的开发过程的三大工具&#xff1a;MMC、MDS、Mind Studio&#xff0c;这三个工具完成了开发过程中的配置文件编写、代码编写以及AI模型的开发三个任务。除了开发&#xff0c;MDC还准备了两个调试工具&#xff0c;用于使用过程中数据的查看等。这一些调试工具分别对映射MDC中…

3.sping掌握Bean生命周期

在Spring框架中&#xff0c;Bean的生命周期指的是从Bean被创建到销毁的整个过程。掌握Bean的生命周期对于开发者来说非常重要&#xff0c;因为它可以帮助开发者更好地理解Spring如何管理Bean&#xff0c;以及如何在Bean的不同阶段插入自定义逻辑。以下是Bean生命周期的主要阶段…

802.11漫游流程简单解析与笔记_Part2_02_wpa_supplicant、cfg80211、nl80211内核与驱动的关系

wpa、cfg80211、nl80211内核与驱动的关系示意图如下&#xff1a; nl80211和cfg80211都是内核定义的标准接口&#xff0c;目的是规范驱动和应用的统一调用&#xff0c;wpa中常出现nl80211就是通过内核的nl80211接口调用对应cfg80211的部分&#xff0c;进而控制驱动收发数据或切换…

AI技术与艺术的融合:开创性的用户界面与产品体验

引言 近年来&#xff0c;人工智能&#xff08;AI&#xff09;的飞速发展改变了我们的生活和工作方式。AI技术不仅在算力和模型上取得了重大进步&#xff0c;更在用户界面和产品体验方面迎来了突破。近日&#xff0c;科技博客 Stratechery 的文章以及硅谷投资基金 AI Grant 的两…

高频面试题基本总结回顾2(含笔试高频算法整理)

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

没有采用框架的LeSS导入

我提倡在使用LeSS中平衡框架导向和实验导向。因为框架导向已经挺强了&#xff0c;我想更多地展开实验导向。有可能不采用LeSS框架来导入LeSS吗&#xff1f;我认为是可能的&#xff0c;因为那其实就是受LeSS实验启发的持续改进。 受LeSS实验启发的持续改进 让我来分两部分加以…

Docker 命令——安全

我们将学习两个命令。第一个命令是 docker container run 命令&#xff0c;这样你就能看到使用该命令的一些好处。其次&#xff0c;我们将看看 docker container diff 命令&#xff0c;你可以用它来查看在已有的镜像基础上做了什么。让我们看看如何使用这两个命令来确保容器的安…

补充:二分类器实现多分类 --- 一对一与一对多策略

文章目录 前言一、一对多(One-vs-Rest, OvR)1 理论2 决策原则(这里给出的是SVM的,其他的二分类器也类似)2 简单代码演示二、 一对一(One-vs-One, OvO)1 理论2 决策原则(投票)3 简单代码演示总结前言 我在大三刚接触到机器学习课程的时候,回归问题很自然就能跨过这个…

深度学习在蛋白质结构预测的新突破:AlphaFold、RoseTTAFold与ESMFold

在蛋白质结构预测和功能预测领域&#xff0c;基于机器学习的方法最近取得了显著的进展。特别是深度学习技术在这个领域中展现出了强大的能力&#xff0c;代表性的技术有 DeepMind 的 AlphaFold 和 RoseTTAFold。这些技术利用了大量的生物数据和先进的神经网络架构&#xff0c;极…

调试代码Pair-wise-Similarity-module-master

第一步&#xff1a;运行.py文件生成json文件 问题一&#xff1a;json.decoder.JSONDecodeError: Invalid \escape: line 1 column 31616 (char 31615) 解决&#xff1a; for dataset in dataset_list:with open(datasetmap[dataset] ".csv", "r") as li…

什么是Arkose Labs挑战及其解决方法

Arkose Labs挑战是一种复杂的机制&#xff0c;旨在验证用户是真正的人类&#xff0c;而不是自动化的机器人或脚本。这一挑战在维护在线服务的安全性和完整性方面发挥着关键作用&#xff0c;通过防止欺诈活动并确保只有真实用户才能访问某些功能。 目录 什么是Arkose Labs挑战&a…

Python 基础 (标准库):堆 heap

1. 官方文档 heapq --- 堆队列算法 — Python 3.12.4 文档 2. 相关概念 堆 heap 是一种具体的数据结构&#xff08;concrete data structures&#xff09;&#xff1b;优先级队列 priority queue 是一种抽象的数据结构&#xff08;abstract data structures&#xff09;&…

分布式锁(3):jedis基于Redis set命令的分布式锁

1 实现思路 获取锁的时候,使用 setnx 加锁,并使用 expire 命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的 value 值需要指定,可以根据具有业务含义,本文简化为 UUID,在释放锁的时候进行判断,避免误释放。获取锁的时候还设置一个获取的超时时间,若超过这个时间…

A34 STM32_HAL库函数 之 PCCARD通用驱动 所有函数的介绍及使用

A34 STM32_HAL库函数 之 PCCARD通用驱动 所有函数的介绍及使用 1 该驱动函数预览1.1 HAL_PCCARD_Init1.2 HAL_PCCARD_DeInit1.3 HAL_PCCARD_MspInit1.4 HAL_PCCARD_MspDeInit1.5 HAL_PCCARD_Read_ID1.6 HAL_PCCARD_Read_Sector1.7 HAL_PCCARD_Write_Sector1.8 HAL_PCCARD_Erase…

微信小程序-自定义组件checkbox

一.自定义Coponent组件 公共组件&#xff1a;将页面内公共的模块抽取为自定义组件&#xff0c;在不同页面复用。 页面组件&#xff1a;将复杂页面进行拆分&#xff0c;降低耦合度&#xff0c;有利于代码维护。 可以新建文件夹component放组件&#xff1a; 组件名为custom-che…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验3 总线型以太网的特性(广播,竞争总线,冲突)

一、实验目的 1.验证总线型以太网的特性&#xff1b; 2.验证广播特性&#xff1b; 3.验证各主机对总线的竞争使用以及可能产生的碰撞。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容…

PatchMixer:一种用于长时间序列预测的Patch混合架构

前言 《PatchMixer: A Patch-Mixing Architecture for Long-Term Time Series Forecasting》原文地址&#xff0c;Github开源代码地址GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习过程中精读的一些论文&#xff0c;并对其进行了中文翻译…

小抄 20240624

1 不要拿自己的短板和别人的长板比。 看到别人的长板&#xff0c;可以学习&#xff0c;不要因为暂时达不到而自卑&#xff0c;长板能成长板&#xff0c;都是经过长期的刻意练习才达到的。 要在认识到自己长板的基础上&#xff0c;以长板为主&#xff0c;适当补充短板&#x…

软件测试学习笔记丨JUnit5执行顺序

本文转自测试人社区&#xff0c;原文链接&#xff1a; https://ceshiren.com/t/topic/28025 指定顺序使用场景 测试用例有业务逻辑相关集成测试(主流程测试) 排序方式 方法排序类排序Suite官方网站没有明确说明默认排序的具体规则 方法排序的类型 方法排序-Order 注解指定排序 …

python中的nan是什么意思

NaN&#xff08;not a number&#xff09;&#xff0c;在数学表示上表示一个无法表示的数&#xff0c;这里一般还会有另一个表述inf&#xff0c;inf和nan的不同在于&#xff0c;inf是一个超过浮点表示范围的浮点数&#xff08;其本质仍然是一个数&#xff0c;只是他无穷大&…