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中常见的数据 ...
随机推荐
- Spring Cloud Zuul 那些你不知道的功能点
本文摘自于 <Spring Cloud微服务 入门 实战与进阶> 一书. 1. /routes 端点 当@EnableZuulProxy与Spring Boot Actuator配合使用时 ...
- 【STM32H7教程】第17章 STM32H7之GPIO的HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第17章 STM32H7之GPIO的HAL库API ...
- Leetcode练习题Search Insert Position
Question: Given a sorted array and a target value, return the index if the target is found. If not, ...
- linux服务器上配置进行kaggle比赛的深度学习tensorflow keras环境详细教程
本文首发于个人博客https://kezunlin.me/post/6b505d27/,欢迎阅读最新内容! full guide tutorial to install and configure d ...
- 如何将Javaweb工程的访问协议由http改为https及通过域名访问?
将javaweb工程的http访问协议更改为https,需要做一下几部操作: 通过jre生成证书 调整tomcat的配置 调整工程的web.xm配置 具体详细过程如下: 一.生成证书 打开cmd切换到 ...
- netty ByteBuf与String相互转换
String转为ByteBuf 1)使用String.getBytes(Charset),将String转为byte[]类型 2)使用Unpooled.wrappedBuffer(byte[]),将b ...
- Python - ^在正则表达式中的作用
^在正则表达式中有两个作用,一是表达以什么开头,二是表达对什么取反.有时候经常傻傻的分不清楚,接下来给大家详细介绍该怎么用这个^准备一个python文件test.py,借用re.search函数举例说 ...
- 删除链表的中间节点和a/b处的节点
问题描述: 删除链表的中间节点和a/b处的节点 给定链表的头结点head,实现删除链表的中间节点的函数: 例如: 不删除任何节点: 1-->2,删除节点1: 1-->2-->3,删除 ...
- java高并发系列 - 第7天:volatile与Java内存模型
public class Demo09 { public static boolean flag = true; public static class T1 extends Thread { pub ...
- 5.智能快递柜(通信篇-Server程序)
1.智能快递柜(开篇) 2.智能快递柜(终端篇) 3.智能快递柜(通信篇-HTTP) 4.智能快递柜(通信篇-SOCKET) 5.智能快递柜(通信篇-Server程序) 6.智能快递柜(平台篇) 7. ...