• Qt实现json解析


    前提要点

    json文件,可通过键值的方式存储你所需要的数据,斌且支持多种类型存储,类似于一种结构化的数据库,在读取json文件时可通过相对应的关键字精准获取。他是一种树状结构,我们可以自己设定叶子的数量以及他所代表的寓意,指定每一个叶子的父亲,以及父亲的父亲......

    本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目视频教程+代码,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

    1. 首先获取地址 读取json文件

    1. ```js
    2. QFile file(QString::fromStdString(json));
    3. bool bOpen = file.open(QIODevice::ReadOnly);
    4. if (bOpen == false)
    5. {
    6. return item;
    7. }
    8. QByteArray data = file.readAll();
    9. file.close();
    10. ```

    读取json文件 那一定要知道他的位置,通过位置理由QFile库 将文件打开`QIODevice::ReadOnly`设置文件为仅读取模式,如果设为可读可写,在后面的处理数据中,以防文件被中途修改。

    2. 将数据转化为json可读

    2.1、首先

    1. ```js
    2. QJsonDocument doc = QJsonDocument::fromJson(data);//读写json文档
    3. if (!doc.isObject())
    4. {
    5. return item;
    6. }
    7. ```

    利用Qt自带库 获取json内容 `QJsonDocument::fromJson(data)` 判断是否为引用类型

    2.2、显示关键字所对应的内容

    1. ```
    2. QStringList keys = obj.keys();
    3. for(int i=0;i<keys.size();i++)
    4. {
    5. qDebug() << "key" << i << " is:" << keys.at(i);
    6. }
    7. ```

    此方法是通过关键字的位置来获取关键字的内容,接下来将会使用另外一种方法:利用关键字读取相对应的内容。

    2.3、json文件读取的不同方式,以及他的类型

    第一种json格式

    json文件 内容:

    1. ```
    2. {
    3. "optionA": "aaa",
    4. "optionB": "bbbb",
    5. "score": 3
    6. }
    7. ```

    解析代码:

    1. ```
    2. QJsonObject obj = doc.object();//封装json对象
    3. item.content = obj["content"].toString().toStdString();
    4. item.optionA = obj["optionA"].toString().toStdString();
    5. item.optionB = obj["optionB"].toString().toStdString();
    6. item.score = obj["score"].toInt();//int 类型 直接toint 不用转为字符串
    7. ```

    以上实例可发现,json主要是由关键字与所对应值构成,斌给有其他别的类型,可以直接解析。QJsonObject是封装一个json对象,可通过这个对象,使用以上方法来获取关键字的内容。

    (注:["content"]所对应的内容一定要是与json文件中的关键字相同,否则解析成功)

    第二种json格式

    json文件 内容:

    1. ```
    2. {
    3. "optionA": "aaa",
    4. "optionB": "bbbb",
    5. "score": 3
    6. }
    7. ```

    解析代码:

    1. ```
    2. QJsonObject obj = doc.object();//封装json对象
    3. item.content = obj["content"].toString().toStdString();
    4. item.optionA = obj["optionA"].toString().toStdString();
    5. item.optionB = obj["optionB"].toString().toStdString();
    6. item.score = obj["score"].toInt();//int 类型 直接toint 不用转为字符串
    7. ```

    以上实例可发现,json
    主要是由关键字与所对应值构成,斌给有其他别的类型,可以直接解析。QJsonObject是封装一个json对象,可通过这个对象,使用以上方法来获取关键字的内容。
    (注:["content"]所对应的内容一定要是与json文件中的关键字相同,否则解析成功)

    第二种json格式
    json文件 内容:

    1. ```
    2. "questinList": [{
    3. "optionA": "aaa",
    4. "optionB": "bbbb",
    5. }, {
    6. "optionA": "aaa",
    7. "optionB": "bbbb",
    8. }]
    9. ```

    解析代码:

    1. ```
    2. QJsonArray questinlist = root["questinlist"].toArray();
    3. for(int i = 0; i < questinlist.count(); i++)
    4. {
    5. QJsonObject obj = questinlist.at(i).toObject();
    6. item.content = obj["content"].toString().toStdString();
    7. item.optionA = obj["optionA"].toString().toStdString();
    8. item.optionB = obj["optionB"].toString().toStdString();
    9. data.questinList.push_back(item);
    10. }
    11. ```

    可通过json文件发现 questinList是一个list 它内部存储了许多的同样类型的数据组,就像是一个妈妈与她的孩子们,他的孩子们都拥有一样的基因,就是他们都拥有一样的关键字,但是每个人又有所不懂,所以他们的关键字所对应的数据不一定全都一样。一个妈妈就是一个Array,通过获取妈妈孩子的数量,将每个孩子带出来,然后转移到另一个存储他们的房子里。

    本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目视频教程+代码,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 相关阅读:
    Android 网络框架之okhttp源码解析
    C指针 --- 进阶
    QT软件开发-基于FFMPEG设计视频播放器-支持软解与硬解(四)
    Azide-PEG-Amine,N3-PEG-NH2,叠氮-聚二乙醇-胺线性双功能peg连接剂
    UE4 粒子特效基础学习 (03-制作上升光线特效)
    C#,二分图(Bipartite Graph)的霍普克罗夫特-卡普(Hopcroft Karp)最大匹配算法与源程序
    操作系统:系统调用
    网络信息安全软考笔记(1)
    【RabbitMQ】WorkQueue
    论文解读(SUBLIME)《Towards Unsupervised Deep Graph Structure Learning》
  • 原文地址:https://blog.csdn.net/m0_73443478/article/details/134090461