Qt读取Json文件的方法详解(含源码+注释)

 更新时间:2022年10月21日 10:34:01   作者:lw只吃亿点.  
QT本身就有读取json的接口,简单又方便,下面这篇文章主要给大家介绍了关于Qt读取Json文件(含源码+注释)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一、示例Json文件内容

下方为本文所使用的Json文件的内容,其中包含字符串、数值、布尔、null、对象、数组、组合类型等(读取方式在本文第三节)

{
	"str": "strVal",
	"number": 88,
	"bool": true,
	"null": null,

	"object": {
		"key1": "Val1",
		"key2": "Val2",
		"key3": "Val3"
	},

	"array": [
		"elem1",
		"elem2",
		"elem3",
		"elem4"
	],

	"combination": [{
			"name": "Google",
			"url": "http://www.google.com"
		},

		{
			"name": "Baidu",
			"url": "http://www.baidu.com"
		},

		{
			"name": "SoSo",
			"url": "http://www.SoSo.com"
		}
	]
}

二、Json读取会使用的类(介绍读取所使用的类在本文中的作用,个人理解)

  • QJsonParseError:用于报告JSON解析期间的错误;当JSON串格式有问题时会存储错误
  • QJsonDocument:提供了一种读取和写入JSON文档的方法;
  • QJsonObject:用于读取对象类型数据和接收从QJsonDocument对象中获取的QJsonObject对象
  • QJsonArray:用于读取数组类型数据

三、Json文件的读取

3.1 读取Json串到QByteArray中

	QFile file("./jsonTest.json");	//创建QFile对象,并指定json文件路径
	//打开json文件并判断(不成功则返回0)
    if(!file.open(QIODevice::ReadOnly))
        return 0;
    //将文件内容读取到数组中
    QByteArray data(file.readAll());
    file.close();	//关闭文件

3.2 读取Json串到QJsonDocument,并使用QJsonParseError判断是否有错

	QJsonParseError jError;	//创建QJsonParseError对象
	//使用QJsonDocument的fromJson函数读取json串,并将QJsonParseError对象传入获取错误值
    QJsonDocument jDoc = QJsonDocument::fromJson(data, &jError);	
    //判断QJsonParseError对象获取的error是否包含错误,包含则返回0
    if(jError.error != QJsonParseError::NoError)
        return 0;

3.3 获取QJsonObject,并读取Json串中各类型的值

获取QJsonObject对象

	QJsonObject jObj = jDoc.object();

获取常规类型的值

	//读取字符串
    QString strVal = jObj["str"].toString();
    //读取数值(对应的数值转换成对应的类型)
    int numVal = jObj["number"].toInt();
    //读取逻辑值
    bool boolVal = jObj["bool"].toBool();
    //读取空值(因其没有对应的to类型函数,可使用下方类型接收或isNull()函数判断)
    QVariant nullVal = jObj["null"].toVariant();

获取对象类型及其中的值

    //对象类型需要使用新的QJsonObject对象存放,然后使用新的QJsonObject获取其中值
    QJsonObject jObj2 = jObj["object"].toObject();
    //获取jObj2中指定键的值(值对应的类型直接使用对应函数转)
    QString key1Val = jObj2["key1"].toString();

获取数组类型及其中的值

    //对象类型需要使用QJsonArray对象存放
    QJsonArray jArr = jObj["array"].toArray();
    //获取jArr中指定下标的值(该值可通过如下方式接收或使用QJsonValue的对象接收)
    QString arr1Val = jArr.at(0).toString();

读取组合类型的值

    //组合对象第一层类型为数组,需要使用QJsonArray对象存放
    QJsonArray jArr2 = jObj["combination"].toArray();
    //数组中存放的对象,使用QJsonObject接收
    QJsonObject jObj3 = jArr2.at(0).toObject();
    //获取对象中的指定键的值
    QString name = jObj3["name"].toString();

总结

建议学习前先了解一下Json文件格式,其次为在编写代码的过程中需要细心,类似的对象名容易混淆

到此这篇关于Qt读取Json文件的文章就介绍到这了,更多相关Qt读取Json文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

相关文章

  • C++实现LeetCode(12.整数转化成罗马数字)

    C++实现LeetCode(12.整数转化成罗马数字)

    这篇文章主要介绍了C++实现LeetCode(12.整数转化成罗马数字),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++程序检测内存泄漏的方法分享

    C++程序检测内存泄漏的方法分享

    这篇文章主要介绍了C++程序检测内存泄漏的方法分享,本文讲解了、对象计数、重载new和delete、Hook Windows系统API、使用DiagLeak检测等内容,需要的朋友可以参考下
    2015-03-03
  • C++实现图书管理系统

    C++实现图书管理系统

    这篇文章主要为大家详细介绍了C++实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C++11 nullptr实现初始化空指针

    C++11 nullptr实现初始化空指针

    避免产生“野指针”最有效的方法,就是在定义指针的同时完成初始化操作,本文主要介绍了C++11 nullptr初始化空指针,感兴趣的可以了解一下
    2022-01-01
  • 使用C++实现工资管理中的随机教师信息生成功能

    使用C++实现工资管理中的随机教师信息生成功能

    这篇文章主要介绍了使用C++实现工资管理中的随机教师信息生成功能,想要做一个教师工资管理系统,就必须得准备好数据,但是这些数据如果用手一行一行地敲,那么工作量是非常大的,因此,我就产生了用C语言实现直接生成大量的教师基本信息的想法,需要的朋友可以参考下
    2023-05-05
  • 深入探究C++ string的内部究竟是什么样的

    深入探究C++ string的内部究竟是什么样的

    这篇文章主要给大家介绍了关于C++ string的内部究竟是什么样的,文中通过示例代码的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C++中strlen函数的三种实现方法

    C++中strlen函数的三种实现方法

    在C语言中我们要获取字符串的长度,可以使用strlen 函数,strlen 函数计算字符串的长度时,直到空结束字符,但不包括空结束字符,因为strlen函数时不包含最后的结束字符的,因此一般使用strlen函数计算的字符串的长度会比使用sizeof计算的字符串的字节数要小
    2022-05-05
  • C语言实现选票统计

    C语言实现选票统计

    这篇文章主要为大家详细介绍了C语言实现选票统计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • C语言预处理预编译命令及宏定义详解

    C语言预处理预编译命令及宏定义详解

    这篇文章主要为大家介绍了C语言预处理预编译命令及宏定义的详解,其中包含运行环境命名约定条件及#under等基础详解,有需要的朋友可以借鉴参考下
    2021-10-10
  • QT实现秒表项目

    QT实现秒表项目

    这篇文章主要为大家详细介绍了QT实现秒表项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论