写点什么

Qt 中读取 json 文件以及总结

  • 2022 年 10 月 02 日
    河北
  • 本文字数:1076 字

    阅读完需:约 4 分钟

Qt中读取json文件以及总结

使用过 C++方式解析 json 的掘友们一定都知道,实在是太痛苦了!用之前还需要添加各种文件,每次获取数据时,只要稍微懈怠忘记了判断是否为 nullptr 就有可能出现崩溃的问题,好难呀!本身 C++写解析就比较麻烦,json 的解析更是长篇大论,最近想尝试下 Qt 中自带的 QJson 的方式对 json 文件的读取,普通的读取查阅资料就有各种方式,这里主要是总结在使用过程中遇到的那些坑,让大家引以为戒~

功能讲解


读取 json 文件

首先介绍下如何进行 json 文件的读取,获取文件中的内容~

QFile file(qsJsonFiles);bool bOpen = file.open(QIODevice::ReadOnly);if (bOpen == false){	return;}QByteArray data = file.readAll();file.close();
复制代码

与普通的*.txt 文件的读取方式一致,在我们操作 json 文件时,其实是对 QByteArray 中的内容进行处理的。

使用 json 文件对象加载字符串

QJsonDocument doc = QJsonDocument::fromJson(data);if (!doc.isObject()){	return;}
复制代码

到这里,我来讲解下遇到的第一个坑吧!

假设你的程序中只是在某一个函数中读取 json 数据,除此之外并没有地方用到,那么恭喜你可以写成局部变量直接使用。

但是,你想要在整个程序的不同地方对 json 进行解析,虽然也是在一个类中操作,但是!需要记住的是,不要多次将 json 文件转换成 QJsonDocument

QJsonDocument:只是提供一种读取和写入 json 文档的方法,不是让我们来回转换的

那我们该使用什么一直获取数据呢?

QJsonObject obj = doc.object();
复制代码

在这里我们想要多个函数处理 json 文件,比较好用的方式是存储成员变量的QJsonObject对象。

json 文件转成 json 对象

首先,我们先看一个简单的 json 文件内容

{	"first":	{		"describe":"文本描述",	},	"second":	[{		"describe":"数据结构",	}],	"three":	[		"纯数组1",		"纯数组2",	]}
复制代码

三种情况,1:纯数据,带有数据的以及纯数组方式加载

针对于不同的 json 结构我们是如何读取的呢?

1:first 情况

QJsonObject obj = doc.object();if (obj.contains("first") && obj["first"].isObject()){	QJsonObject subObj = obj["first"].toObject();}
复制代码

使用这种方式需要注意的是,"first"这个 key 值一定是必须存在的。

其实还有另一种设置方式,代码如下:

QJsonValue value = obj.value("first"); if(value.isObject()) {     //数据有效,进行实际处理 }
复制代码

第二种方式也只能适合普通的 json 数据,对于带有数组的 json 就不适合了。

2:second、three 情况

针对于后面的两种情况可以用一种方式来获取

if (obj.contains("second") && obj["second"].isArray()){	QJsonArray subObjList = obj["miseCaseStageList"].toArray();        //实际的数据处理}
复制代码


用户头像

书山有路勤为径,学海无涯苦作舟 2022.07.01 加入

擅长语言:C++ 涉及语言:Python

评论

发布
暂无评论
Qt中读取json文件以及总结_c++_中国好公民st_InfoQ写作社区