当前位置:网站首页>Qt读取Json文件(含源码+注释)
Qt读取Json文件(含源码+注释)
2022-08-02 15:17:00 【web18484626332】
一、示例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读写ini文件(含源码+注释)
Qt读写XML文件(含源码+注释)
友情提示——哪里看不懂可私哦,让我们一起互相进步吧
(创作不易,请留下一个免费的赞叭 谢谢 o/)
注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。
注:如有侵权,请联系作者删除
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
随机推荐
NXP i.MX 8M Mini工业核心板B2B版本,4核ARM [email protected]设计
继续来学习有关淘宝的API接口的使用——获得店铺的所有商品 API
MySQL【数据类型】
剑指Offer 49.丑数 动态规划
DC-DC选型及电路设计
程序员开发效率神器汇总!
Go-6-常用命令-go包管理问题-两个路径-GO111MODULE
软件成分分析:华为云重磅发布开源软件治理服务
阿里面试败北:5种微服务注册中心如何选型?这几个维度告诉你
RecSys'22 推荐系统论文梳理
Why do I no longer recommend the enumeration strategy pattern?
23、wpf之布局(一)
(LinkedList与链表) 和 (ArrayList与顺序表)的区别
OneFlow源码解析:Op、Kernel与解释器
2.7 - 文件管理 2.8 - 多级目录结构 2.9 - 位示图
该死的单元测试,写起来到底有多痛?
动态权重之多任务不平衡论文 (一)
节省50%成本!京东云重磅发布新一代混合CDN产品
华为研究院19级研究员几年心得,终成趣谈网络协议文档,附大牛讲解
看我如何用多线程,帮助运营小姐姐解决数据校对系统变慢!