目录
1、QJson 三兄弟:QJsonDocument、 QJsonObject、QJsonValue
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