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::Value 和 Json::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);
|