Qt6.5示例:QJsonDocument类封装JSON文档

发布时间:2024年01月18日

01 QJsonDocument介绍

QJsonDocument是一个用于处理JSON(JavaScript Object Notation)文档的类。它提供了读写JSON文档的方法,可以将JSON文档以UTF-8编码的文本形式,和QT自身的二进制格式进行读写。

02 如何使用QJsonDocument

头文件:#include <QJsonDocument>

cmake:find_package(Qt6 REQUIRED COMPONENTS Core)

target_link_libraries(mytarget PRIVATE Qt6::Core)

qmake:QT += core

03 JSON文档介绍

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

JSON的优点在于其简洁和清晰的层次结构,使得它成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON对象是一个无序的“名称/值”对集合,以左括号“{”开始,右括号“}”结束。每个“名称”后跟一个冒号“:”,“名称/值”对之间使用逗号“,”分隔。

JSON数组是一个有序的“值”集合,以左括号“[”开始,右括号“]”结束。值之间使用逗号“,”分隔。

  • JSON文档示例:

以下JSON文档例子,包含有id,value,title,colors,window五个属性,每个属性有对应的值。其中id是整数,value是浮点数,title是字符串,colors是数组,window是一个嵌套JSON对象,包括width、height二个整数属性。

{
    "id": 100,
    "value": 99.5,
    "title": "20YC编程",
    "colors": ["red", "green", "blue"],
    "window":
    {
        "width": 1024,
        "height": 720
    }
}

04 QJsonDocument封装JSON文档方法

  • 构建QJsonObject对象:

QJsonObject是用于表示JSON对象的一个类。QJsonObject提供了一种方便的方式来处理JSON对象数据。

/**** 例子: ****/
#include <QJsonObject>

// 创建一个空JSON对象。
QJsonObject json_object;
  • QJsonObject添加基础数据示例:

/**** 例子: ****/

// 添加整数。
json_object["id"] = 1;

// 添加浮点数。
json_object["value"] = 99.9;

// 添加字符串。
json_object["title"] = "20YC编程";
  • QJsonObject添加数组示例:

/**** 例子: ****/
#include <QJsonArray>

// 创建一个空QJsonArray数组对象。
QJsonArray json_array;
json_array.append("red");       // 数组对象添加元素
json_array.append("green");     // 数组对象添加元素
json_array.append("blue");      // 数组对象添加元素
json_array.append("white");     // 数组对象添加元素
// 添加数组对象到JSON对象中。
json_object["colors"] = json_array;
  • QJsonObject添加子对象示例:

/**** 例子: ****/

// 创建空QJsonObject子对象。
QJsonObject child_object;
child_object["x"] = 0;          // 子对象添加元素
child_object["y"] = 0;          // 子对象添加元素
child_object["width"] = 1024;   // 子对象添加元素
child_object["height"] = 720;   // 子对象添加元素
// 添加子对象到JSON对象中。
json_object["window"] = child_object;
  • 通过QJsonObject创建QJsonDocument对象示例:

/**** 例子: ****/

// 将JSON对象转换为QJsonDocument。
QJsonDocument json_doc(json_object);
  • QJsonDocument对象转JSON文档格式化:

QJsonDocument支持生成二种JSON格式化文档,通过QJsonDocument::JsonFormat枚举类型表示,宏定义如下:

QJsonDocument::Indented 0 生成格式化的、易于阅读的 JSON 字符串。

QJsonDocument::Compact 1 生成紧凑的、没有额外空格或换行的 JSON 字符串。

// 访问函数。
QByteArray toJson() const
QByteArray toJson(QJsonDocument::JsonFormat format) const

/**** 例子: ****/

// 转JSON字符串。
QString qstr_json = json_doc.toJson(QJsonDocument::Indented);

05 QJsonDocument封装JSON文档完整示例

  • 示例代码:

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QFile>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建一个空JSON对象。
    QJsonObject json_object;

    // 添加整数。
    json_object["id"] = 1;

    // 添加浮点数。
    json_object["value"] = 99.9;

    // 添加字符串。
    json_object["title"] = "20YC编程";
    
    // 添加QJsonArray数组对象。
    QJsonArray json_array;          // 创建一个空QJsonArray数组对象。
    json_array.append("red");       // 数组对象添加元素
    json_array.append("green");     // 数组对象添加元素
    json_array.append("blue");      // 数组对象添加元素
    json_array.append("white");     // 数组对象添加元素
    json_object["colors"] = json_array;
    
    // 添加QJsonObject子对象。
    QJsonObject child_object;       // 创建空QJsonObject子对象。
    child_object["x"] = 0;          // 子对象添加元素
    child_object["y"] = 0;          // 子对象添加元素
    child_object["width"] = 1024;   // 子对象添加元素
    child_object["height"] = 720;   // 子对象添加元素
    json_object["window"] = child_object;

    // 将JSON对象转换为QJsonDocument。
    QJsonDocument json_doc(json_object);
    
    // 将JSON文档保存到"newSample.json"文件。
    QFile file("newExample.json");
    if (file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        file.write(json_doc.toJson());  // 保存到文件。
        file.close();
    }
    
    return 0;
}

运行这个程序将创建一个名为"newExample.json"的JSON文档文件。

newExample.json内容如下:

{
    "colors": [
        "red",
        "green",
        "blue",
        "white"
    ],
    "id": 1,
    "title": "20YC编程",
    "value": 99.9,
    "window": {
        "height": 720,
        "width": 1024,
        "x": 0,
        "y": 0    
    }
}

06?附录:完整源码

关注公众号下载本示例完整源码(14_QJsonDocument_WriteXml.zip)。

-【End】-

#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。

喜欢本文章,记得点赞、分享、关注哦~

文章来源:https://blog.csdn.net/yanghz/article/details/135372252
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。