在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

相关文章

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

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本