qt对json的序列化和反序列化
时间: 2023-11-15 18:56:46 浏览: 74
Qt提供了QJsonDocument类来进行JSON的序列化和反序列化。具体使用方法如下:
1. JSON序列化
```cpp
QJsonObject obj;
obj.insert("name", "Tom");
obj.insert("age", 18);
QJsonDocument doc(obj);
QString jsonStr(doc.toJson(QJsonDocument::Compact));
```
2. JSON反序列化
```cpp
QString jsonStr = "{\"name\":\"Tom\",\"age\":18}";
QJsonDocument doc = QJsonDocument::fromJson(jsonStr.toUtf8());
if (!doc.isNull() && doc.isObject()) {
QJsonObject obj = doc.object();
QString name = obj.value("name").toString();
int age = obj.value("age").toInt();
}
```
相关问题
QT自带的序列化和反序列化库
QT自带的序列化和反序列化库是Qt的核心模块之一,用于将对象转换为字节流以便于存储或传输,并且可以将字节流还原为原始对象。Qt提供了两个主要的序列化和反序列化类:QDataStream和QJsonDocument。
1. QDataStream:
QDataStream是Qt提供的二进制序列化和反序列化类,可以将对象以二进制形式进行序列化和反序列化。它支持多种数据类型的序列化,包括基本数据类型、Qt容器类、自定义类等。使用QDataStream进行序列化和反序列化的步骤如下:
- 创建一个QDataStream对象,并指定要进行序列化或反序列化的设备(如文件、套接字等)。
- 使用<<操作符将对象写入QDataStream中进行序列化,或使用>>操作符从QDataStream中读取对象进行反序列化。
2. QJsonDocument:
QJsonDocument是Qt提供的JSON序列化和反序列化类,可以将对象以JSON格式进行序列化和反序列化。它支持将Qt的基本数据类型、容器类、自定义类等转换为JSON字符串,并可以将JSON字符串还原为原始对象。使用QJsonDocument进行序列化和反序列化的步骤如下:
- 创建一个QJsonDocument对象,并使用QJsonObject或QJsonArray构建JSON数据结构。
- 调用toJson()函数将JSON数据结构转换为JSON字符串进行序列化,或调用fromJson()函数将JSON字符串转换为JSON数据结构进行反序列化。
qt create 将json文件内容序列化存储
您可以使用Qt提供的QJsonDocument和QJsonObject类将JSON数据序列化并存储到文件中。下面是一个例子:
```cpp
// 创建一个QJsonObject对象并添加数据
QJsonObject jsonObj;
jsonObj["name"] = "张三";
jsonObj["age"] = 20;
jsonObj["gender"] = "男";
// 创建一个QJsonDocument对象,并将QJsonObject对象添加到其中
QJsonDocument jsonDoc(jsonObj);
// 将QJsonDocument对象序列化为JSON字符串
QByteArray jsonData = jsonDoc.toJson();
// 将JSON字符串写入文件
QFile file("data.json");
if (file.open(QIODevice::WriteOnly)) {
file.write(jsonData);
file.close();
}
```
在这个例子中,我们首先创建一个QJsonObject对象,并向其中添加一些数据。然后,我们将这个QJsonObject对象添加到一个QJsonDocument对象中,并将其序列化为一个JSON字符串。最后,我们将这个JSON字符串写入一个名为"data.json"的文件中。
当您需要读取这个文件并将其反序列化为一个QJsonObject对象时,可以使用以下代码:
```cpp
// 读取文件中的JSON数据
QFile file("data.json");
if (file.open(QIODevice::ReadOnly)) {
QByteArray jsonData = file.readAll();
file.close();
// 将JSON数据解析为QJsonDocument对象
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
// 从QJsonDocument对象中获取QJsonObject对象
QJsonObject jsonObj = jsonDoc.object();
// 使用QJsonObject对象中的数据
QString name = jsonObj["name"].toString();
int age = jsonObj["age"].toInt();
QString gender = jsonObj["gender"].toString();
}
```
在这个例子中,我们首先读取文件中的JSON数据,并将其解析为一个QJsonDocument对象。然后,我们从QJsonDocument对象中获取QJsonObject对象,并使用其中的数据。