C++ 基于rapidjson对json字符串的进行序列化与反序列化
json字符串的解析以封装在我们开发过程中经常见到, 尤其在socket通信上面, 在一次项目中碰到json字符串的进行解析, 而公司有没有封装好的库, 于是就自己基于开源的库进行了一次封装, 接下是使用案例, 如果感觉可以, 就去下载我的源代码自己编译一个库出来(能直接编译通过, 无任何依赖),
下载地址: https://download.csdn.net/download/weixin_41370313/11457996
jsonObjDefine.h
#pragma once
#include "../LibJosnSerial/JsonBase.h"
#include <string>
using namespace JsonBaseHelper;
using namespace std;
class Person : public JsonBase
{
public:
string name;
string sex;
int age;
int ident;
void ToWrite(Writer<StringBuffer> &writer)
{
RapidjsonWriteBegin(writer);
RapidjsonWriteString(name);
RapidjsonWriteString(sex);
RapidjsonWriteInt(age);
RapidjsonWriteInt(ident);
RapidjsonWriteEnd();
}
void ParseJson(const Value& val)
{
RapidjsonParseBegin(val);
RapidjsonParseToString(name);
RapidjsonParseToString(sex);
RapidjsonParseToInt(age);
RapidjsonParseToInt(ident);
RapidjsonParseEnd();
}
}; class MacPropery : public JsonBase
{
public:
int count;
float perMachine;
int machineCount;
string operationTime;
void ToWrite(Writer<StringBuffer> &writer)
{
RapidjsonWriteBegin(writer);
RapidjsonWriteInt(count);
RapidjsonWriteDouble(perMachine);
RapidjsonWriteInt(machineCount);
RapidjsonWriteString(operationTime);
RapidjsonWriteEnd();
};
void ParseJson(const Value& val)
{
RapidjsonParseBegin(val);
RapidjsonParseToInt(count);
RapidjsonParseToDouble(perMachine);
RapidjsonParseToInt(machineCount);
RapidjsonParseToString(operationTime);
RapidjsonParseEnd();
};
}; class PrintMacInfo : public JsonBase
{
public:
int code;
string message;
JsonArray<MacPropery> data;
void ToWrite(Writer<StringBuffer> &writer)
{
RapidjsonWriteBegin(writer);
RapidjsonWriteInt(code);
RapidjsonWriteString(message);
RapidjsonWriteClass(data);
RapidjsonWriteEnd();
};
void ParseJson(const Value& val)
{
RapidjsonParseBegin(val);
RapidjsonParseToInt(code);
RapidjsonParseToString(message);
RapidjsonParseToClass(data);
RapidjsonParseEnd();
};
};
测试demo
#include <iostream>
#include "JsonObjDefine.h" //定义json对象头文件
#include <iostream>
//基于rapidjson封装的库
#pragma comment(lib, "..\\LibJosnSerial\\Bin\\LibJosnSerial.lib")
int main()
{
std::cout << "基础json字符串转换\n";
Person per;
per.age = 99;
per.ident = 123;
per.name = "测试";
per.sex = "男性";
string strPerJson = JsonBase::SerializeJson(&per);
std::cout << "Person -> Json字符串:" << std::endl << strPerJson << std::endl;
std::cout << endl;
std::cout << "Json字符串 -> Person" << std::endl;
Person perRet;
JsonBase::DeserializeJson(&perRet, strPerJson);
cout << "age: " << perRet.age << endl;
cout << "ident: " << perRet.ident << endl;
cout << "name: " << perRet.name << endl;
cout << "sex: " << perRet.sex << endl;
std::cout << endl; std::cout << "有嵌套json字符串转换\n";
PrintMacInfo printMac;
printMac.code = 0;
printMac.message = "测试json字符串";
MacPropery mac_1;
mac_1.count = 6031;
mac_1.perMachine = 861.57;
mac_1.machineCount = 7;
mac_1.operationTime = "2012";
printMac.data.objList.push_back(mac_1);
MacPropery mac_2;
mac_2.count = 20754;
mac_2.perMachine = 2964.86;
mac_2.machineCount = 7;
mac_2.operationTime = "2018";
printMac.data.objList.push_back(mac_2);
string strJson = JsonBase::SerializeJson(&printMac);
std::cout << "PrintMacInfo -> Json字符串:"<< std::endl << strJson<<std::endl;
std::cout << endl;
std::cout << "Json字符串 -> PrintMacInfo" << endl;
PrintMacInfo printMacRet;
JsonBase::DeserializeJson(&printMacRet, strJson);
cout << "code:"<< printMacRet.code << endl;
cout << "message" << printMacRet.message << endl;
int index = 1;
for each(auto it in printMacRet.data.objList)
{
cout << "data_MacPro_"<<index<<": "<< it.count << endl;
cout << "data_MacPro_"<<index<<": "<< it.machineCount << endl;
cout << "data_MacPro_"<<index<<": "<< it.perMachine << endl;
cout << "data_MacPro_"<<index<<": "<< it.operationTime << endl;
cout << endl;
index++;
}
getchar();
}
打印输出:
普通字符串格式
{
"name": "测试",
"sex": "男性",
"age": 99,
"ident": 123
}
有嵌套json字符串格式
{
"code": 0,
"message": "测试json字符串",
"data": [{
"count": 6031,
"perMachine": 861.5700073242188,
"machineCount": 7,
"operationTime ": "2012 "
},
{
"count ": 20754,
"perMachine ": 2964.860107421875,
"machineCount ": 7,
"operationTime ": "2018 "
}
]
}
C++ 基于rapidjson对json字符串的进行序列化与反序列化的更多相关文章
- DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化
度娘许久,找不到我满意的答案,于是自己东凑西凑实现一个. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化,亲测良好. 看代码 using System; ...
- JSON与对象的序列化与反序列化
一.利用JavaScriptSerializer 类 System.Web.Script.Serialization空间,位于System.Web.extensions.dll中. JavaScrip ...
- ASP.NET中JSON对时间进行序列化和反序列化
JSON格式不直接支持日期和时间.DateTime值显示为“/Date(0+0800)/”形式的JSON字符串,其中第一个数字是GMT时区中自1970年1月1 日午夜以来按正常时间(非夏令时)经过的毫 ...
- json相关注解和序列化与反序列化
使用jackson进行序列化时,往往会遇到后台某个实体对象的属性为null,当序列化成json时对应的属性也为null,可以用以下的注解方式完成当属性为null时不参与序列化: @JsonSerial ...
- json 字符串转换成对象,对象转换成json字符串
json 字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法: [注意jquery版本问题] var str = '{"name":&qu ...
- Newtonsoft.Json高级用法,json序列号,model反序列化,支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity,字符串
原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口 ...
- Newtonsoft.Json.dll 反序列化JSON字符串
上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...
- 解决json字符串转为对象时LocalDateTime异常问题
1 出现异常 这次的异常出现在前端向后端发送请求体里带了两个日期,在后端的实体类中,这两个日期的格式都是JDK8中的时间类LocalDateTime.默认情况下,LocalDateTime只能解析20 ...
- python序列化与反序列化(json、pickle)-(五)
1.什么是序列化&反序列化? 序列化:将字典.列表.类的实例对象等内容转换成一个字符串的过程. 反序列化:将一个字符串转换成字典.列表.类的实例对象等内容的过程 PS:Python中常见的数据 ...
随机推荐
- Golang 入门 : channel(通道)
笔者在<Golang 入门 : 竞争条件>一文中介绍了 Golang 并发编程中需要面对的竞争条件.本文我们就介绍如何使用 Golang 提供的 channel(通道) 消除竞争条件. C ...
- Java连载40-参数传递、this关键字
一.对象和引用 1.对象:目前在使用new运算符在堆内存中开辟的内存空间成为对象. 2.引用:是一个变量,不一定是局部变量,好可能是成员变量,引用保存了内存地址,指向了堆内存中对象.所有访问实例的相关 ...
- Mybatis和Hibernate框架的区别
Mybatis和Hibernate框架的区别1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据 ...
- 【STM32H7教程】第17章 STM32H7之GPIO的HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第17章 STM32H7之GPIO的HAL库API ...
- Android常用adb命令总结(一)
ADB是android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备. ADB是一个客户端-服务器端程序,其中客户端是你用来操作的电脑,服务器端是an ...
- 关于excel中的vlookup就是查找当前列对应的下一列的值的使用
关于excel中的vlookup就是查找当前列对应的下一列的值的使用 vlookup的使用一些说明 vlookup函数一个4个参数解释下 vlookup(查找的值,表格范围,表格范围中第几列的值,0是 ...
- c#微信公众号开发一----基本设置,服务器配置token验证,获取timestamp/nonce/signature
一.c#微信公众号开发----基本设置 参考微信官方文档 https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Acce ...
- Java生鲜电商平台-订单架构实战
Java生鲜电商平台-订单架构实战 生鲜电商中订单中心是一个电商后台系统的枢纽,在这订单这一环节上需要读取多个模块的数据和信息进行加工处理,并流向下一环节:因此订单模块对一电商系统来说,重要性不言而喻 ...
- linux下grep命令的使用实例
#多文件查询grep leo logs.log logs_back.log #查找即包含leo又包含li的行grep leo logs.log | grep li #查找匹配leo或者匹配li的行gr ...
- overflow-x:scroll失效问题解决
在移动设备上设置overflow-x:scroll,大部分机型都是展示正常的,在安卓哦5.0系统上,无论怎么样滚动条都不会生效,终于找到了解决办法: display: -webkit-box; // ...