• qt json


    简单入门
    json基本规则:

    1. 数据使用名/值对表示。
    2. 使用大括号保存对象,每个名称后面跟着一个 ‘:’(冒号),名/值对使用 ,(逗号)分割。
    3. 使用方括号保存数组,数组值使用 ,(逗号)分割。

    类QJsonValue

    用于封装JSON值

    类QJsonObject

    负责封装JSON对象,是键/值对列表,其中键是惟一的字符串,值由QJsonValue表示。
    初始化方式:

    QJsonObject jsonObject;
    jsonObject["key1"] = 1;
    jsonObject["key2"] = 6.6;
    jsonObject.insert("key3", "Hello world");
    jsonObject["array"] = QJsonArray({1, 2, 3}); 
    //或者
    QJsonObject jsonObject
    {
        {"key1", 1},
        {"key2", 6.6},
        {"key3", "Hello world"},
        {"array", QJsonArray({1, 2, 3})}
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    QJsonArray

    负责封装JSON数组,JSON数组是一个值列表,接口与QVariantList类似,QJsonArray与QVariantList可以互相转换。
    QJsonList操作于QList相似,都具有size()、insert()和removeAt()等操作,还可以使用标准的C++迭代器模式对其内容进行迭代。
    直接赋值使用:

    QJsonArray jsonArray = { 1, 6.6, QString("Hello world") };
    
    • 1

    接口操作使用:

    QJsonArray jsonArray;
    jsonArray.append(1);
    jsonArray.append(6.6);
    jsonArray.insert(2, "Hello world");
    
    • 1
    • 2
    • 3
    • 4

    QJsonDocument

    // 使用QJsonDocument设置该json对象
    QJsonDocument jsonDoc;
    jsonDoc.setObject(jsonObject);

    // 将json以文本形式写入文件并关闭文件。
    file.write(jsonDoc.toJson());
    file.close();

    练习

    {
        "Company": "Digia",
        "From": 1991,
        "Name": "Qt",
        "Page": {
            "Developers": "https://www.qt.io/developers/",
            "Download": "https://www.qt.io/download/",
            "Home": "https://www.qt.io/"
        },
        "Version": [
            4.8,
            5.2,
            5.7
        ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    其中 "Page"的值是一个QJsonObject对象,"Version"是一个列表

    // 构建 Json 数组 - Version
    QJsonArray versionArray;
    versionArray.append(4.8);
    versionArray.append(5.2);
    versionArray.append(5.7);
     
    // 构建 Json 对象 - Page
    QJsonObject pageObject;
    pageObject.insert("Home", "https://www.qt.io/");
    pageObject.insert("Download", "https://www.qt.io/download/");
    pageObject.insert("Developers", "https://www.qt.io/developers/");
     
    // 构建 Json 对象
    QJsonObject json;
    json.insert("Name", "Qt");
    json.insert("Company", "Digia");
    json.insert("From", 1991);
    json.insert("Version", QJsonValue(versionArray));
    json.insert("Page", QJsonValue(pageObject));
     
    // 构建 Json 文档
    QJsonDocument document;
    document.setObject(json);
    QByteArray byteArray = document.toJson(QJsonDocument::Compact);
    QString strJson(byteArray);
     
    qDebug() << strJson;
     
    
    • 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

    QString和QJsonObject的相互转化

    // QString >> QJson
    QJsonObject getJsonObjectFromString(const QString jsonString){
        QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonString.toLocal8Bit().data());
        if( jsonDocument.isNull() ){
            qDebug()<< "===> please check the string "<< jsonString.toLocal8Bit().data();
        }
        QJsonObject jsonObject = jsonDocument.object();
        return jsonObject;
    }
    // QJson >> QString
    QString getStringFromJsonObject(const QJsonObject& jsonObject){
        return QString(QJsonDocument(jsonObject).toJson());
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    vuex的学习
    数据挖掘神经网络算法,人工神经网络分析方法
    Spring基础(二):IOC概念引入
    DO、DTO、BO、VO、POJO 的区别
    【三维重建-PatchMatchNet复现笔记】
    基础概念回顾:云原生应用交付
    udev自动创建设备节点
    合成游戏开发方案
    #Day Day Plan# 《NCB_PCI_Express_Base 5.0.1.0》pdf 译文笔记
    刷题笔记19——优势洗牌和去重保持字典序
  • 原文地址:https://blog.csdn.net/fuyouzhiyi/article/details/120562133