在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

相关文章

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素