• 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"
    		}
    	]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

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

    1. QJsonParseError:用于报告JSON解析期间的错误;当JSON串格式有问题时会存储错误
    2. QJsonDocument:提供了一种读取和写入JSON文档的方法;
    3. QJsonObject:用于读取对象类型数据和接收从QJsonDocument对象中获取的QJsonObject对象
    4. 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();	//关闭文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    获取QJsonObject对象

    	QJsonObject jObj = jDoc.object();
    
    • 1

    获取常规类型的值

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

    获取对象类型及其中的值

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

    获取数组类型及其中的值

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

    读取组合类型的值

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

    总结

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

    相关文章

    Qt写入Json文件(含源码+注释)
    Qt读写ini文件(含源码+注释)
    Qt读写XML文件(含源码+注释)

    友情提示——哪里看不懂可私哦,让我们一起互相进步吧
    (创作不易,请留下一个免费的赞叭 谢谢 o/)

    注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。
    注:如有侵权,请联系作者删除

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    TypeScript
    Unity的Camera类——视觉掌控与深度解析(上)
    《C++ Core Guidelines解析》:揭示现代C++最佳实践的深层原理
    题目 1071:阶乘公式求值
    LeetCode:买卖股票的最佳时机 系列Ⅰ、Ⅱ、Ⅲ、Ⅳ、含冷冻期(C++)
    php练习04
    java毕业设计点播影院运营系统mybatis+源码+调试部署+系统+数据库+lw
    【已解决】Qt发送信号后,槽函数没有响应
    关于使用NodeJS+Express搭建服务器访问静态资源的一些填坑经验
    CV系列汇总记录【满满的回忆杀】
  • 原文地址:https://blog.csdn.net/web18484626332/article/details/126113956