• 【Qt之json文件】json文件介绍及相关读写类介绍、示例


    JSON介绍

    JSON(JavaScript Object Notation)是一种源自Javascript的编码对象数据的轻量级的数据交换格式,易于理解和编写,JSON但现在已广泛用作互联网上的数据交换格式。
    Qt提供了处理JSON数据的支持。Qt中的JSON支持提供了一个易于使用的C++ API,用于解析、修改和保存JSON数据。它还包含支持将这种数据以二进制格式保存的功能,这种格式可以直接“映射”并且非常快速地访问。有关JSON数据格式的更多详细信息,可以在json.org和RFC-7159中找到。

    JSON格式

    JSON格式主要有以下三种:

    对象格式(键值对):JSON对象以“{}”括起来,内部由0个或多个以英文逗号分隔的“key:value”对构成。示例:

    json
    {  
      "name": "John",  
      "age": 30,  
      "city": "New York"  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    数组格式:JSON数组以“[]”括起来,内部由0个或多个以英文逗号分隔的值列表组成。示例:

    json
    [  
      "apple",  
      "banana",  
      "cherry"  
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    嵌套格式:JSON对象和数组可以互相嵌套,形成更复杂的数据结构。示例:

    json
    {  
      "name": "John",  
      "age": 30,  
      "city": "New York",  
      "fruits": [  
        "apple",  
        "banana",  
        "cherry"  
      ]  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    读写类

    在Qt中,可以使用QJsonDocument、QJsonObject、QJsonArray等类来读写JSON文件。

    1. QJsonDocument:用于解析JSON数据和生成JSON文档。
    2. QJsonObject:用于表示JSON对象。
    3. QJsonArray:用于表示JSON数组。

    示例

    以下是一个示例,实现从JSON文件中读取数据:
    比如json文件是以下格式:
    test.json

    {
        "name": "John",
        "age": 30,
        "address": {
            "street": "123 Main St",
            "city": "New York",
            "state": "NY"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    代码

    #include 
    #include 
    #include 
    #include 
    #include 
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QFile file(":/test.json"); // 从资源文件中读取JSON文件
        file.open(QIODevice::ReadOnly | QIODevice::Text); // 以只读文本方式打开文件
        QString content = QString(file.readAll());
        file.close(); // 关闭文件
    
        QJsonDocument jsonDoc = QJsonDocument::fromJson(content.toUtf8());
        QJsonObject jsonObj = jsonDoc.object();
    
        qDebug() << jsonObj["name"].toString(); // 输出name属性的值
    
        return a.exec();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    上述代码从资源文件中读取JSON文件,然后解析JSON数据并将其转换为QJsonObject对象。可以通过[“属性名”]的方式来访问JSON对象中的属性值。

    QJsonObject

    QJsonObject对象也可以通过以下方式添加属性值:

    QJsonObject jsonObj;
    jsonObj["name"] = "John";
    jsonObj["age"] = 30;
    
    • 1
    • 2
    • 3

    使用QJsonDocument对象将QJsonObject对象转换为JSON字符串

    QJsonDocument jsonDoc(jsonObj);
    QString jsonString = jsonDoc.toJson();
    
    • 1
    • 2

    将QJsonObject对象转换为JSON字符串,并将其存储在QString对象中。

    将内容写入json

    QFile file("test.json");
    file.open(QIODevice::WriteOnly | QIODevice::Text); // 以只写文本方式打开文件
    file.write(jsonString.toUtf8());
    file.close(); // 关闭文件
    
    • 1
    • 2
    • 3
    • 4

    综上所述,Qt提供了方便易用的类来读写JSON文件,使得处理JSON数据变得容易。

  • 相关阅读:
    大模型日报2024-04-17
    快速了解 Java 类加载机制 & 双亲委派
    SpringBoot整合Freemarker导出word文档表格
    Spring解析之finishBeanFactoryInitialization即初始化单例bean
    FT2000/4查看CPU温度以及频率
    DTSE Tech Talk丨第3期:解密数据隔离方案,让SaaS应用开发更轻松
    MATLAB | 三个趣的圆相关的数理性质可视化
    CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) D. Count GCD
    我的编程学习笔记
    长周期数据更新的处理
  • 原文地址:https://blog.csdn.net/MrHHHHHH/article/details/133955925