Qt中json的使用

目录

一、json相关类和接口

1.QJsonDocument

2.QJsonObject

3.QJsonArray

4.QJsonValue

二、json写文件

1.写文件基本流程

2.代码示例

三、json读文件

1.读文件基本流程

2.代码示例


json是一种轻量级的数据交换格式,在Qt中使用json数据可以通过Qt提供的QJsonDocument、QJsonObject、QJsonArray和QJsonValue类来实现。

一、json相关类和接口

1.QJsonDocument

QJsonDocument类用于处理json数据,它可以将json数据解析为QJsonDocument对象,也可以将QJsonDocument对象转换为json字符串或二进制数据。

主要接口:

  1. fromJson():用于将json数据解析为QJsonDocument对象。
  2. toJson():用于将QJsonDocument对象转换为json字符串或二进制数据。
  3. isArray():用于判断文档是否包含一个数组。
  4. isObject():用于判断文档是否包含一个对象。
  5. array():用于提取文档中的数组。
  6. object():用于提取文档中的对象。

2.QJsonObject

QJsonObject类用于表示json对象,提供了插入键值对、获取值、检查键是否存在等功能。

主要接口:

  1. insert():用于向json对象中插入键值对。
  2. value():可以通过key值获取value值。
  3. contains():检查json对象中是否包含指定key。
  4. find():返回json对象中键为指定key的键值对的迭代器。
  5. remove():用于删除json对象中指定键值对。

3.QJsonArray

QJsonArray类用于表示json数组,提供了添加元素、获取元素、获取数组大小等功能。

主要接口:

  1. append():用于在json数组的尾部添加元素。
  2. insert():用于在json数组的指定索引前添加元素。
  3. at():用于获取json数组中指定索引处的元素。
  4. size():用于获取json数组的大小。
  5. removeAt():用于删除json数组中指定索引处的元素。

4.QJsonValue

QJsonValue类可以封装json支持的几种类型,包括字符串、数字、布尔值、对象、数组和空值。

主要接口:

  1. isString():用于判断值是否为字符串。
  2. isDouble():用于判断值是否为数字。
  3. isBool():用于判断值是否为布尔类型。
  4. isArray():用于判断值是否为数组。
  5. isObject():用于判断值是否为对象。
  6. isNull():用于判断值是否为空值类型。
  7. toString():用于将值转换为字符串。
  8. toDouble():用于将值转换为数字。
  9. toBool():用于将值转换为布尔类型。
  10. toArray():用于将值转换为数组。
  11. toObject():用于将值转换为对象。

二、json写文件

1.写文件基本流程

  1. 构建结构(QJsonObject/QJsonArray)
  2. 填充数据(insert/append)
  3. QJsonDocument转换为QByteArray(toJson)
  4. 写入文件(QFile)

2.代码示例

cpp 复制代码
QJsonObject jsonObj;
jsonObj.insert("name","Mike");
jsonObj.insert("age",30);

QJsonArray hobbies;
hobbies.append("reading");
hobbies.append("writing");
jsonObj.insert("hobbies",hobbies);

QJsonDocument jsonDoc(jsonObj);
QByteArray jsonData = jsonDoc.toJson();

QFile file("D:/test.json");
if(!file.open(QIODevice::WriteOnly)) qDebug()<<"error";
file.write(jsonData);
file.close();

三、json读文件

1.读文件基本流程

  1. 从文件读取到QByteArray(QFile)
  2. QByteArray转换为QJsonDocument(fromJson)
  3. QJsonDocument转换为QJsonObject/QJsonArray(object/array)
  4. 读取数据(value/at)

2.代码示例

cpp 复制代码
QFile file("D:/test.json");
if(!file.open(QIODevice::ReadOnly)) qDebug()<<"error";
QByteArray data = file.readAll();
file.close();

QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonStr);

if (jsonDoc.isObject()) {
    QJsonObject jsonObj = jsonDoc.object();
    QStringList keys = jsonObj.keys();
    for (const QString &key : keys) {
        QJsonValue value = jsonObj.value(key);
        if (value.isString()) {
            qDebug() << key << ": " << value.toString();
        }
        else if (value.isDouble()) {
            qDebug() << key << ": " << value.toDouble();
        }
    }
} else if (jsonDoc.isArray()) {
    QJsonArray jsonArray = jsonDoc.array();
    for (int i = 0; i < jsonArray.count(); i++) {
        QJsonValue value = jsonArray.at(i);
        if (value.isString()) {
            qDebug()<<value.toString();
        }
        else if (value.isDouble()) {
            qDebug()<<value.toDouble();
        }
        else if (value.isBool()) {
            qDebug()<<value.toBool();
        }
        else if (value.isNull()) {
            qDebug()<<"null";
        }
    }
}
相关推荐
Mr_Xuhhh2 小时前
网络基础(1)
c语言·开发语言·网络·c++·qt·算法
草履虫建模2 小时前
Postman - API 调试与开发工具 - 标准使用流程
java·测试工具·spring·json·测试用例·postman·集成学习
feiyangqingyun5 小时前
Qt音视频开发技巧/推流带旋转角度/rtsprtmp推流/保存文件到MP4/拉流解析旋转角度
qt·音视频·qt旋转角度推流
清醒的兰6 小时前
Qt 基于TCP套接字编程
网络·qt·tcp
mahuifa10 天前
PySide环境配置及工具使用
python·qt·环境配置·开发经验·pyside
小灰灰搞电子10 天前
Qt PyQt与PySide技术-C++库的Python绑定
c++·qt·pyqt
奔跑的蜗牛AZ10 天前
TiDB 字符串行转列与 JSON 数据查询优化知识笔记
笔记·json·tidb
Echo``10 天前
12.OpenCV—基础入门
开发语言·c++·人工智能·qt·opencv·计算机视觉
智驾10 天前
QML革命:下一代GUI开发的核心优势详解
qt·qml
五_谷_丰_登10 天前
mongoDB服务本地化部署
数据库·c++·qt·mongodb