相关文章推荐
重情义的红豆  ·  git push后出现src ...·  8 月前    · 
朝气蓬勃的包子  ·  PySCENIC(三):pyscenic单细 ...·  1 年前    · 
暴走的苹果  ·  JavaScript-Map.has()用法 ...·  1 年前    · 
沉稳的石榴  ·  一分钟详解三维重建学习路线 - ...·  1 年前    · 
气宇轩昂的竹笋  ·  React组件、组件封装、组件通信 - ...·  1 年前    · 
Code  ›  Qt读取Json文件(含源码+注释)
object 数组 对象数组
https://blog.csdn.net/wj584652425/article/details/124204115
买醉的牛肉面
6 月前
  • 一、示例Json文件内容
  • 二、Json读取会使用的类(介绍读取所使用的类在本文中的作用,个人理解)
  • 三、Json文件的读取
    • 3.1 读取Json串到QByteArray中
    • 3.2 读取Json串到QJsonDocument,并使用QJsonParseError判断是否有错
    • 3.3 获取QJsonObject,并读取Json串中各类型的值
      • 获取QJsonObject对象
      • 获取常规类型的值
      • 获取对象类型及其中的值
      • 获取数组类型及其中的值
      • 读取组合类型的值
    • 总结
    • 相关文章

    一、示例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读取会使用的类(介绍读取所使用的类在本文中的作用,个人理解)

    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();	//关闭文件
    

    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^/)

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

     "content":[                            //数组    {                                            //object1       "key1":"键值1",       "key2":"键值2" QString name = "./config/portSet.json"; QFile loadFile(name); if(!loadFile.open(QIODevice::ReadOnly)) LOG() << "could't open projects json"; #include <QJsonArray> json 文件里基本有三类:数组、键值对、对象。其中对象内部为一系列的键值对,数组内部比较宽泛,可以是对象,字符串,数字等。具体可参考json文件格式详解 分别写入对象,数组,或者键值对 一、读出字符串 QFile json_file(filepath); json_file.open(QIODevice::ReadOnly | QIODevice::Text); if(json_file.open(QIODevice::ReadOnly | QIODevice::Text)) // 读取JSON文件 QFile file("path/to/file.json"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 文件打开失败 qDebug() << "Failed to open file"; return; QJsonParseError jsonError; QJsonDocument document = QJsonDocument::fromJson(file.readAll(), &jsonError); file.close(); if (jsonError.error != QJsonParseError::NoError) { // JSON文件加载内容报错 qDebug() << "JSON parse error:" << jsonError.errorString(); return; // 执行解析操作 if (document.isObject()) { QJsonObject jsonObject = document.object(); // 对象解析操作 } else if (document.isArray()) { QJsonArray jsonArray = document.array(); // 数组解析操作 在上面的代码中,首先使用QFile类打开JSON文件,然后使用QJsonDocument的静态函数fromJson()将文件内容解析为JSON文档。如果解析过程中出现错误,可以通过QJsonParseError类获取错误信息。最后,根据JSON文档的类型执行相应的解析操作。
 
推荐文章
重情义的红豆  ·  git push后出现src refspec dev does not match any-CSDN博客
8 月前
朝气蓬勃的包子  ·  PySCENIC(三):pyscenic单细胞转录因子分析可视化_pyscenic中文教程-CSDN博客
1 年前
暴走的苹果  ·  JavaScript-Map.has()用法 - Chloe56 - 博客园
1 年前
沉稳的石榴  ·  一分钟详解三维重建学习路线 - 3D视觉工坊 - 博客园
1 年前
气宇轩昂的竹笋  ·  React组件、组件封装、组件通信 - 柒一柒 - 简书
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号