• Qt使用Json


    包含目录:

    #include 
    #include 
    #include 
    #include 
    #include 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    基本结构:
    在这里插入图片描述
    json

    QJsonObject studentobj;
        QJsonArray arrarydata;
        QJsonObject subdata;
        int id = 01;
        QString name = "zhangsan";
        QString gender = "Male";
       subdata.insert("id", QJsonValue(id));
       subdata.insert("name", QJsonValue(name));
       subdata.insert("gender", QJsonValue(gender));
       arrarydata.append(QJsonValue(subdata));
       id = 02;
       name = "lisi";
       gender = "Male";
       subdata.insert("id", QJsonValue(id));
       subdata.insert("name", QJsonValue(name));
       subdata.insert("gender", QJsonValue(gender));
       arrarydata.append(QJsonValue(subdata));
       studentobj.insert("Student", QJsonValue(arrarydata));
        //写入到文件,名字为info.json
        QJsonDocument docs(studentobj);
        QByteArray datas = docs.toJson();
        QFile files("student.json");
        bool oks = files.open(QIODevice::WriteOnly);
        if (oks)
        {
             files.write(datas);
             files.close();
        }
        else
        {
             qDebug() << "write error!" << endl;
        }
    
    • 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

    读json

    QFile file("student.json");
        file.open(QIODevice::ReadOnly);
        QByteArray data = file.readAll();
        file.close();
        //解析
        QJsonParseError parseError;
        QJsonDocument doc = QJsonDocument::fromJson(data, &parseError);
        if (parseError.error != QJsonParseError::NoError) {
            qDebug() << "error";
            return;
        }
        QJsonObject obj = doc.object();
        if (obj.contains("Student"))
        {
            QJsonValue arrayTemp = obj.value("Student");
            QJsonArray array = arrayTemp.toArray();
            qDebug() << "array size: " << array.size();// size: 2
            QJsonValue sub = array.at(0);//因为里面就一个元素,如果有多个元素,可以通过array.size()遍历
            QJsonObject subObj = sub.toObject();
            int  id = subObj.value("id").toInt();
            QString name = subObj.value("name").toString();
            QString gender = subObj.value("gender").toString();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    复合结构:

    	QJsonArray ArrayALL;
        QJsonObject studentobj;
        QJsonArray studentarrarydata;
        QJsonObject studentsubdata;
        int id = 01;
        QString name = "zhangsan";
        QString gender = "Male";
        studentsubdata.insert("id", QJsonValue(id));
        studentsubdata.insert("name", QJsonValue(name));
        studentsubdata.insert("gender", QJsonValue(gender));
        studentarrarydata.append(QJsonValue(studentsubdata));
        id = 02;
        name = "lisi";
        gender = "Male";
       studentsubdata.insert("id", QJsonValue(id));
       studentsubdata.insert("name", QJsonValue(name));
       studentsubdata.insert("gender", QJsonValue(gender));
       studentarrarydata.append(QJsonValue(studentsubdata));
       studentobj.insert("Student", QJsonValue(studentarrarydata));
       QJsonObject scoreobj;
       QJsonArray scorearrarydata;
       QJsonObject scoresubdata;
       id = 01;
       double math = 95;
       double physics = 85;
       double english = 66;
       scoresubdata.insert("ID", id);
       scoresubdata.insert("Math", math);
       scoresubdata.insert("Physics", physics);
       scoresubdata.insert("English", english);
       scorearrarydata.append(scoresubdata);
       id = 02;
       math = 85;
       physics = 95;
       english = 86;
       scoresubdata.insert("ID", id);
       scoresubdata.insert("Math", math);
       scoresubdata.insert("Physics", physics);
       scoresubdata.insert("English", english);
       scorearrarydata.append(scoresubdata);
       scoreobj.insert("Score", scorearrarydata);
       ArrayALL.append(studentobj);
       ArrayALL.append(scoreobj);
       QJsonDocument jsonDoc;
       jsonDoc.setArray(ArrayALL);
       QByteArray json = jsonDoc.toJson();
       //写文件
       QFile file0("test.json");
       file0.open(QIODevice::WriteOnly);
       file0.write(json);
       file0.close();
    
    • 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
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    在这里插入图片描述
    读文件

    QFile file("info.json");
    file.open(QIODevice::ReadOnly);
    QByteArray data = file.readAll();
    file.close();
    //解析
    QJsonParseError parseError;
    QJsonDocument document= QJsonDocument::fromJson(data, &parseError);
    if (parseError.error != QJsonParseError::NoError) {
        qDebug() << "error";
        return;
    }
    if(document.isArray())
    {
                int Num = document.array().size();
                 for(int i = 0; i <  Num ; ++i)
                {
                    QJsonObject obj = document[i].toObject();
                    QJsonValue value = obj.value("Student");
                    int size = value.toArray().size();  //size=2
                    	for(int j = 0 ; j < size;++j)
                        {
                            QJsonObject objData = value[j].toObject();
                           	int  id = objData .value("id").toInt();
                            ........
                        }
    			}
                ......   
    }
    
    • 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
  • 相关阅读:
    Prettier - Code formatter格式化规则文件
    Android设计模式--观察者模式
    【LeetCode刷题(数据结构)】:另一颗树的子树
    批量导入Npm包依赖到Nexus私服(批量上传脚本)
    Problem C: 算法2-23:一元多项式加法
    卡莱特在创业板上市:IPO首日跌破发行价,周锦志为实际控制人
    @JsonView注解大白话简介说明
    基于Spring事件驱动模式实现业务解耦
    Odoo 15开发手册第九章 外部 API - 集成第三方系统
    SQLAlchemy:filter()和filter_by()的微妙差异
  • 原文地址:https://blog.csdn.net/weixin_41377572/article/details/132642998