【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"对构成。示例:

cpp 复制代码
json
{  
  "name": "John",  
  "age": 30,  
  "city": "New York"  
}

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

cpp 复制代码
json
[  
  "apple",  
  "banana",  
  "cherry"  
]

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

cpp 复制代码
json
{  
  "name": "John",  
  "age": 30,  
  "city": "New York",  
  "fruits": [  
    "apple",  
    "banana",  
    "cherry"  
  ]  
}

读写类

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

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

示例

以下是一个示例,实现从JSON文件中读取数据:

比如json文件是以下格式:
test.json

json 复制代码
{
    "name": "John",
    "age": 30,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "state": "NY"
    }
}

代码

cpp 复制代码
#include <QCoreApplication>
#include <QFile>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>

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();
}

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

QJsonObject

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

cpp 复制代码
QJsonObject jsonObj;
jsonObj["name"] = "John";
jsonObj["age"] = 30;

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

cpp 复制代码
QJsonDocument jsonDoc(jsonObj);
QString jsonString = jsonDoc.toJson();

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

将内容写入json

cpp 复制代码
QFile file("test.json");
file.open(QIODevice::WriteOnly | QIODevice::Text); // 以只写文本方式打开文件
file.write(jsonString.toUtf8());
file.close(); // 关闭文件

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

相关推荐
apcipot_rain4 小时前
C++转Java日记(04)
java·开发语言·c++
sycmancia5 小时前
Qml——信号连接、自定义信号
qt
云和数据.ChenGuang6 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
蜗牛一步步往上爬9 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
张张123y11 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
冻柠檬飞冰走茶14 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
FRing0314 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
雪落漂泊14 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
波力海苔夹心脆67515 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩16 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常