Json 序列化

Qt

序列化:内存中的结构化数据 -> 可存储/网络传输的字符串/字节流(Json 格式或者其它格式)

反序列化:文件/网络中读取的 Json 字符串/字节流 -> 还原成内存中的结构化数据

Qt 内置了 Json 的处理,核心流程可以概括为:

1
内存对象(QJsonObject)⇌ Json 文档(QJsonDocument)⇌ 字节数组(QByteArray)⇌ 文件/网络

Json 序列化:

1
2
3
4
5
6
7
8
1. QJsonObject: 通过 insert 修改 QJsonObject 里面的键值对
m_config.insert("user", "test");
m_config.insert("auto", true);
2. QJSonDocument: 直接作为参数构造
QJsonDocument doc(m_config)
3. QByteArray: 通过 toJson 将文档转换为 JSON 格式的字符串
QByteArray jsonData = doc.toJson();
4. 文件或者网络处理

Json 反序列化:

1
2
3
4
5
6
7
8
1. 文件或者网络处理: 文件的话通过 readAll 来提取字符串
QByteArray data = file.readAll();
2. QJsonDocument: 通过 fromJson 提取文档内容
QJsonParseError error;
QJsonDocument doc = QJsonDocument::fromJson(data, &error);
3. QJsonObject: 通过 object() 直接提取
QJsonObject m_config = doc.object();
4. 提取完毕

Jsoncpp

Jsoncpp 是第三方库,给他编译配置项目中即可,主要介绍一下使用的方法

首先 Jsoncpp 里面比较重要的是 Json::ValueJson::Reader

Json 序列化

主要利用 Json::value.toStyleString 接口

1
2
3
jsonSend["email"] = email;
jsonSend["error"] = ErrorCodes::SUCCESS;
std::string jsonstr = jsonSend.toStyledString();

Json 反序列化

主要是利用 Json::Reader.parse 接口

1
2
3
4
5
std::string body_str = beast::buffers_to_string(m_request.body().data());
Json::Value jsonRecv;
Json::Reader reader;
// 反序列化
bool success = reader.parse(body_str, jsonRecv);

Json 序列化
https://dxblacksmith.github.io/2026/01/28/Json 序列化/
作者
DxBlackSmith
发布于
2026年1月28日
许可协议