QJsonDocument、 QJsonObject、QJsonValue关系以及用法

目录

1、QJson 三兄弟:QJsonDocument、 QJsonObject、QJsonValue

2、一个使用这些类的实例


1、QJson 三兄弟:QJsonDocument、 QJsonObject、QJsonValue

在此,引进一个变量:QByteArray

(1)QByteArray是Qt中的字节数组类,它提供了一种方便的方式来管理和操作二进制数据;

        用于处理二进制数据和字符串之间的转换

(2)QJsonDocument是一个用于处理JSON格式数据的类,它可以将JSON数据转换为QByteArray或QVariant类型,并提供了一些方法来操作JSON数据;

        用于解析和生成JSON格式的数据

// QJsonDocument常用api

1. fromJson(const QByteArray &json):将 JSON 格式的字节数组转换为 QJsonDocument。
2. toJson():将 QJsonDocument 转换为 JSON 格式的字符串。
3. object():返回 QJsonDocument 中的 JSON 对象。
4. array():返回 QJsonDocument 中的 JSON 数组。
5. isEmpty():判断 QJsonDocument 是否为空。
6. isNull():判断 QJsonDocument 是否为 null。
7. isObject():判断 QJsonDocument 是否为 JSON 对象。
8. isArray():判断 QJsonDocument 是否为 JSON 数组。
9. isString():判断 QJsonDocument 是否为 JSON 字符串。
10. isBool():判断 QJsonDocument 是否为 JSON 布尔值。
11. isDouble():判断 QJsonDocument 是否为 JSON 数值。
12. isUndefined():判断 QJsonDocument 是否为 JSON 未定义值。
13. fromJson(const QString &json):将 JSON 格式的字符串转换为 QJsonDocument。
14. fromVariant(const QVariant &variant):将 QVariant 转换为 QJsonDocument。
15. toVariant():将 QJsonDocument 转换为 QVariant。

(3)QJsonObject是QJsonDocument中的一个类,它表示一个JSON对象,它可以包含一组键值对。

// QJsonObject 的 API:

1. insert():向 QJsonObject 中插入一个键值对
2. remove():从 QJsonObject 中移除一个键值对
3. value():获取 QJsonObject 中某个键的值
4. contains():判断 QJsonObject 中是否包含某个键
5. keys():获取 QJsonObject 中所有键的列表
6. size():获取 QJsonObject 中键值对的数量
7. toVariant():将 QJsonObject 转换为 QVariant 对象
8. fromVariant():将 QVariant 对象转换为 QJsonObject 对象
9. take()是一个函数,用于从QJsonObject中获取并删除指定键的值,返回该值。如果指定键不存在,则返回一个未初始化的QJsonValue对象。该函数的作用类似于从字典中删除一个键值对,并返回该值。

QJsonObject::take() 和 QJsonObject::remove 区别:

QJsonObject::take()和remove()都是用于从QJsonObject中移除一个键值对的方法,但它们的返回值和操作方式有所不同。

1. 返回值:

- take()返回移除的键值对,即QJsonValue类型的值。
- remove()返回一个布尔值,表示是否成功移除了指定的键值对。

2. 操作方式:

- take()会将键值对从QJsonObject中移除,并返回该键值对的值。如果指定的键不存在,则返回一个空的QJsonValue。
- remove()会将键值对从QJsonObject中移除,并返回一个布尔值表示是否成功移除了指定的键值对。如果指定的键不存在,则返回false。

总体来说,take()更适合在需要移除一个键值对的同时获取它的值的情况下使用,而remove()更适合在只需要移除一个键值对而不需要获取其值的情况下使用。

(4)QJsonValue是QJsonObject中的一个类,它表示一个JSON值,可以是字符串、数字、布尔值、对象、数组或空值。

// QJsonValue 常用api

1. isNull(): 检查该值是否为 null。
2. isBool(): 检查该值是否为 bool 类型。
3. isDouble(): 检查该值是否为 double 类型。
4. isString(): 检查该值是否为字符串类型。
5. isObject(): 检查该值是否为对象类型。
6. isArray(): 检查该值是否为数组类型。
7. toInt(): 将该值转换为整数类型。
8. toDouble(): 将该值转换为 double 类型。
9. toString(): 将该值转换为字符串类型。
10. toObject(): 将该值转换为对象类型。
11. toArray(): 将该值转换为数组类型。
12. operator[](): 获取数组或对象中指定索引或键的值。
13. keys(): 获取对象类型的所有键。
14. size(): 获取数组或对象类型的元素个数。

(5)QJson三兄弟与QByteArray之间的关系:

        使用QByteArray可以将JSON数据从网络上获取并存储在内存中。然后,可以使用QJsonDocument将该数据解析为QJsonObject或QJsonValue。可以使用QJsonObject的方法来访问其中的键值对,或者使用QJsonValue的方法来确定值的类型并提取其值。可以使用QJsonDocument将QJsonObject或QJsonValue转换为JSON格式的QByteArray,以便将其发送到网络或存储在文件中。

2、一个使用这些类的实例

#include <QByteArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QDebug>

int main()
{
    // 创建一个JSON对象
    QJsonObject object;
    object.insert("name", "John");
    object.insert("age", 30);

    // 将JSON对象转换为QJsonDocument
    QJsonDocument document(object);

    // 将QJsonDocument转换为QByteArray
    QByteArray data = document.toJson();

    // 输出QByteArray
    qDebug() << data;

    // 将QByteArray转换为QJsonDocument
    QJsonDocument newDocument = QJsonDocument::fromJson(data);

    // 将QJsonDocument转换为JSON对象
    QJsonObject newObject = newDocument.object();

    // 获取JSON对象中的值
    QString name = newObject.value("name").toString();
    int age = newObject.value("age").toInt();

    // 输出值
    qDebug() << "Name: " << name;
    qDebug() << "Age: " << age;

    return 0;
}

该程序将创建一个JSON对象,将其转换为QJsonDocument,然后将其转换为QByteArray。然后,它将QByteArray转换回QJsonDocument,然后将其转换为JSON对象。最后,它将从JSON对象中获取值并将其输出。

输出如下:

"{\"age\":30,\"name\":\"John\"}"
Name: "John"
Age: 30

  • 8
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt中,可以使用Qt提供的Json类来组织和解析数据。Qt从版本5.0开始提供了对Json的支持。主要有四个与Json相关的类常用:QJsonDocument、QJsonArray、QJsonObject和QJsonValue。 QJsonDocument类封装了一个完整的JSON文档,可以从基于文本的UTF-8编码的表示以及Qt的二进制格式读取和写入该文档。 QJsonArray表示JSON数组,是一个值的列表。可以通过插入和删除QJsonValue来操作该列表。 QJsonObject表示JSON对象,是键值对的列表,其中键是唯一的字符串,值由QJsonValue表示。 QJsonValue类封装了JSON支持的数据类型。 QJsonParseError类用于报告JSON解析过程中的错误。 对于Json的使用,可以参考以上提到的类的文档和相关函数进行操作,根据具体的需求进行数据的组织和解析。Json格式的数据在Qt中可以方便地进行处理,并且由于Json的数据格式与语言无关,因此在Qt中的Json使用具有广泛的应用场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【QTQtJson 的操作](https://blog.csdn.net/qq_43331089/article/details/124582761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【Qt专栏】QtJson的使用教程](https://blog.csdn.net/weixin_43729127/article/details/127522889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值