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字符串的进行序列化与反序列化的更多相关文章

  1. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化

    度娘许久,找不到我满意的答案,于是自己东凑西凑实现一个. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化,亲测良好. 看代码 using System; ...

  2. JSON与对象的序列化与反序列化

    一.利用JavaScriptSerializer 类 System.Web.Script.Serialization空间,位于System.Web.extensions.dll中. JavaScrip ...

  3. ASP.NET中JSON对时间进行序列化和反序列化

    JSON格式不直接支持日期和时间.DateTime值显示为“/Date(0+0800)/”形式的JSON字符串,其中第一个数字是GMT时区中自1970年1月1 日午夜以来按正常时间(非夏令时)经过的毫 ...

  4. json相关注解和序列化与反序列化

    使用jackson进行序列化时,往往会遇到后台某个实体对象的属性为null,当序列化成json时对应的属性也为null,可以用以下的注解方式完成当属性为null时不参与序列化: @JsonSerial ...

  5. json 字符串转换成对象,对象转换成json字符串

    json   字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法:   [注意jquery版本问题] var str = '{"name":&qu ...

  6. Newtonsoft.Json高级用法,json序列号,model反序列化,支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity,字符串

    原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口 ...

  7. Newtonsoft.Json.dll 反序列化JSON字符串

    上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...

  8. 解决json字符串转为对象时LocalDateTime异常问题

    1 出现异常 这次的异常出现在前端向后端发送请求体里带了两个日期,在后端的实体类中,这两个日期的格式都是JDK8中的时间类LocalDateTime.默认情况下,LocalDateTime只能解析20 ...

  9. python序列化与反序列化(json、pickle)-(五)

    1.什么是序列化&反序列化? 序列化:将字典.列表.类的实例对象等内容转换成一个字符串的过程. 反序列化:将一个字符串转换成字典.列表.类的实例对象等内容的过程 PS:Python中常见的数据 ...

随机推荐

  1. eclipse中的clean操作

    在eclipse中写JavaWeb项目时,有时候会出现代码修改了,但是执行的效果还是修改之前的,这时候clean一下就会解决问题 1.clean操作 Project---->clean---&g ...

  2. intellij idea从git检出代码并建立工程

    1. 打开intellij idea,点击configure,settings 2. 左侧展开Version Control,点击Git,点击下图中红框中按钮 3. 在弹出窗口中找到git.exe,点 ...

  3. vue--npm install只许成功,不许失败

    npm安装时出现run `npm audit fix` to fix them, or `npm audit` for details 方案一: 1.如果你的项目里存在 package-lock.js ...

  4. 拎壶学python3-----(5)pycharm解决运行时少库的问题

    有时候我们运行的时候会出现如下现象 no module named requests怎么办呢? 点击设置: 安装成功后会显示如下: 怎么进行安装呢? 然后退出再运行: 发现已经没有缺少requests ...

  5. SqlServer ----- 根据查询语句创建视图

    我们都知道视图的本质就是查询语句,那么就可以根据查询语句创建视图, 前提 知道视图的组成,已经写好的sql 语句,多表或单表的查询语句,将查询语句变成视图. 所以视图可以由单表,多表或视图加表构成. ...

  6. 面试必问的Spring IOC详解

    广义的 IOC IoC(Inversion of Control) 控制反转,即“不用打电话过来,我们会打给你”. 两种实现: 依赖查找(DL)和依赖注入(DI). IOC 和 DI .DL 的关系( ...

  7. 动态SQL屏幕条件选择(里面还有赋值的新语法)

    有时候屏幕条件中使用PARAMETERS时候,如果你为空的话,会查不出数据,但是可能你的想法是不想限制而已,但是系统默认理解为了空值,这个时候,如果取判断一下条件是不是空,在SQL里决定写不写的话,会 ...

  8. c#中取绝对值

    记一次工作中查询的资料: System.Math.Abs(float value); System.Math.Abs(decimal value); System.Math.Abs(int value ...

  9. PHP+Ajax手机移动端发红包实例

    基本流程:当输入完红包数量和总金额后,PHP会根据这两个值进行随机分配每个金额,保证每个人都能领取到一个红包,且每个红包金额不等,并且所有红包金额总额等于总金额. 实现原理:设定总金额为10元,有N个 ...

  10. JAVA语言的环境搭建

    1.下载JDK 下载地址 https://www.oracle.com/technetwork/java/javase/downloads/index.html 2.安装JDK 傻瓜式的安装,一直点击 ...