0%

QJsonObject

摘要

  • QJsonObject 类 相关学习笔记

C++ Qt QJsonObject 类 详解

QJsonObject 是 Qt 框架中用于表示 JSON 对象的类,它提供了操作 JSON 数据的功能,例如访问键值对、添加或删除元素、以及与其他 JSON 相关类(如 QJsonArrayQJsonDocument)的交互。

以下是 QJsonObject 类的详细介绍:


1. 概述

QJsonObject 是一种键值对的集合,其中键是 QString 类型,值可以是以下类型之一:

  • QJsonValue::Null
  • QJsonValue::Bool
  • QJsonValue::Double
  • QJsonValue::String
  • QJsonValue::Array
  • QJsonValue::Object

QJsonObject 的主要用途是存储和操作 JSON 格式的数据,通常结合 QJsonDocument 使用。


2. 构造函数

  • 默认构造函数:

    1
    QJsonObject();

    创建一个空的 JSON 对象。

  • 拷贝构造函数:

    1
    QJsonObject(const QJsonObject &other);

    创建一个与 other 相同的 JSON 对象。

  • 析构函数:

    1
    ~QJsonObject();

3. 常用方法

3.1 插入与访问键值对

  • 插入键值对:

    1
    void insert(const QString &key, const QJsonValue &value);

    或者使用重载操作符:

    1
    QJsonValue &operator[](const QString &key);
  • 访问值:

    1
    QJsonValue value(const QString &key) const;
  • 检查是否包含键:

    1
    bool contains(const QString &key) const;
  • 删除键值对:

    1
    int remove(const QString &key);

3.2 遍历 JSON 对象

  • 键列表:

    1
    QStringList keys() const;
  • 值列表:

    1
    QList<QJsonValue> values() const;
  • 迭代键值对:
    使用 for 循环遍历:

    1
    2
    3
    4
    for (auto it = jsonObject.begin(); it != jsonObject.end(); ++it) {
    QString key = it.key();
    QJsonValue value = it.value();
    }

3.3 大小与空检查

  • 获取键值对数量:

    1
    int size() const;
  • 检查是否为空:

    1
    bool isEmpty() const;

4. 与其他 JSON 类的互操作

  • 转换为 QJsonDocument:

    1
    QJsonDocument doc(jsonObject);
  • QJsonDocument 创建:

    1
    QJsonObject jsonObject = doc.object();
  • QJsonValue 的互操作:

    1
    QJsonValue value = jsonObject.value("key");

5. 示例代码

5.1 创建与操作 JSON 对象

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
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonDocument>
#include <QDebug>

int main() {
// 创建 JSON 对象
QJsonObject jsonObject;
jsonObject.insert("name", QJsonValue("Alice"));
jsonObject.insert("age", QJsonValue(25));
jsonObject.insert("isStudent", QJsonValue(true));

// 访问值
qDebug() << "Name:" << jsonObject.value("name").toString();
qDebug() << "Age:" << jsonObject.value("age").toInt();
qDebug() << "Is student:" << jsonObject.value("isStudent").toBool();

// 删除键值对
jsonObject.remove("isStudent");

// 转换为 QJsonDocument
QJsonDocument doc(jsonObject);
qDebug() << "JSON String:" << doc.toJson(QJsonDocument::Compact);

return 0;
}

输出:

1
2
3
4
Name: "Alice"
Age: 25
Is student: true
JSON String: {"age":25,"name":"Alice"}

5.2 遍历键值对

1
2
3
4
5
6
7
QJsonObject jsonObject;
jsonObject.insert("key1", QJsonValue("value1"));
jsonObject.insert("key2", QJsonValue(42));

for (auto it = jsonObject.begin(); it != jsonObject.end(); ++it) {
qDebug() << "Key:" << it.key() << "Value:" << it.value();
}

6. 注意事项

  1. QJsonObject 的键是区分大小写的。
  2. JSON 的键通常是字符串类型,不能为非字符串类型。
  3. 如果需要处理嵌套 JSON 数据,可以递归地使用 QJsonObjectQJsonArray

以上就是 Qt 中 QJsonObject 的详细介绍和使用方法。

感谢老板支持!敬礼(^^ゞ