在Qt5中创建、读取和写入JSON文件的完整指南

2024-06-24 05:28

本文主要是介绍在Qt5中创建、读取和写入JSON文件的完整指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt5 提供了一个非常方便的JSON解析器,使得在C++中处理JSON数据变得非常简单。本文将详细介绍如何在Qt5中创建、读取和写入JSON文件。

读取JSON文件的示例

假设我们有一个名为test.json的JSON文件,内容如下:

{"appDesc": {"description": "SomeDescription","message": "SomeMessage"},"appName": {"description": "Home","message": "Welcome","imp": ["awesome", "best", "good"]}
}

我们可以通过以下代码读取这个JSON文件:

void readJson() {QString val;QFile file;file.setFileName("test.json");file.open(QIODevice::ReadOnly | QIODevice::Text);val = file.readAll();file.close();qWarning() << val;QJsonDocument d = QJsonDocument::fromJson(val.toUtf8());QJsonObject sett2 = d.object();QJsonValue value = sett2.value(QString("appName"));qWarning() << value;QJsonObject item = value.toObject();qWarning() << tr("QJsonObject of description: ") << item;// 获取字符串值并转换为字符串qWarning() << tr("QJsonObject[appName] of description: ") << item["description"];QJsonValue subobj = item["description"];qWarning() << subobj.toString();// 获取数组值并转换为字符串qWarning() << tr("QJsonObject[appName] of value: ") << item["imp"];QJsonArray test = item["imp"].toArray();qWarning() << test[1].toString();
}

执行上述代码后,控制台输出如下:

QJsonValue(object, QJsonObject({"description": "Home","imp": ["awesome","best","good"],"message": "Welcome"}) )
"QJsonObject of description: " QJsonObject({"description": "Home","imp": ["awesome","best","good"],"message": "Welcome"})
"QJsonObject[appName] of description: " QJsonValue(string, "Home")
"Home"
"QJsonObject[appName] of value: " QJsonValue(array, QJsonArray(["awesome","best","good"]))
"best"

解析JSON字符串的示例

我们也可以将一个JSON字符串解析为JSON对象:

void readJsonFromString() {QString jsonString = R"({"appDesc": {"description": "SomeDescription","message": "SomeMessage"},"appName": {"description": "Home","message": "Welcome","imp": ["awesome", "best", "good"]}})";QJsonDocument d = QJsonDocument::fromJson(jsonString.toUtf8());QJsonObject sett2 = d.object();QJsonValue value = sett2.value(QString("appName"));qWarning() << value;QJsonObject item = value.toObject();qWarning() << tr("QJsonObject of description: ") << item;qWarning() << tr("QJsonObject[appName] of description: ") << item["description"];QJsonValue subobj = item["description"];qWarning() << subobj.toString();qWarning() << tr("QJsonObject[appName] of value: ") << item["imp"];QJsonArray test = item["imp"].toArray();qWarning() << test[1].toString();
}

创建和写入JSON文件的示例

下面的代码展示了如何创建一个带有结构的JSON文件:

void createJson() {QFile file(QDir::homePath() + "/1.json");if(!file.open(QIODevice::ReadWrite)) {qDebug() << "File open error";} else {qDebug() << "File open!";}// 清空文件内容file.resize(0);// 创建JSON数组,并写入到文件QJsonArray jsonArray;for(int i = 0; i < 10; i++) {QJsonObject jsonObject;jsonObject.insert("Date", QDateTime::currentDateTime().toString());jsonObject.insert("Band", "20");QJsonObject jsonSenderLatObject;jsonSenderLatObject.insert("Lat", 13);jsonSenderLatObject.insert("Lon", 122);jsonSenderLatObject.insert("Sender", "DX0HQ");QJsonObject jsonReceiverLatObject;jsonReceiverLatObject.insert("Lat", 36.400001525878906);jsonReceiverLatObject.insert("Lon", 138.3800048828125);jsonReceiverLatObject.insert("Receiver", "8N3HQ");jsonObject.insert("Receiver", jsonReceiverLatObject);jsonObject.insert("Sender", jsonSenderLatObject);jsonArray.append(jsonObject);}QJsonObject finalObject;finalObject.insert("number", jsonArray.size());jsonArray.append(finalObject);QJsonDocument jsonDoc;jsonDoc.setArray(jsonArray);file.write(jsonDoc.toJson());file.close();qDebug() << "Write to file";
}

输出的JSON文件内容如下:

[{"Band": "20","Date": "Sat Jul 10 12:00:00 2021","Receiver": {"Lat": 36.400001525878906,"Lon": 138.3800048828125,"Receiver": "8N3HQ"},"Sender": {"Lat": 13,"Lon": 122,"Sender": "DX0HQ"}},// 其他条目省略{"number": 10}
]

这篇关于在Qt5中创建、读取和写入JSON文件的完整指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089280

相关文章

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java