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. CF1253E Antenna Coverage(DP)

    本题难点在正确性证明. 令 \(f_i\) 表示 \([1,i]\) 被全部覆盖的最小花费.答案为 \(f_m\). 首先发现,添加一个区间 \([0,0]\) 不会影响答案.所以 \(f_i\) 的 ...

  2. GNSS频率分配表

    说明: 公开资料表示,GPS L3用于核爆炸等高能红外辐射事件的侦查,L4用于电离层研究. GLONASS FDMA信号G1.G2.G3三个频段各自频点见以下附表,摘自ITU的频率协调结果. GLON ...

  3. Nginx 极简教程(快速入门)

    作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4.  ...

  4. SpringBoot 2.X从0到1实现邮件发送功能

    Spring中提供了JavaMailSender接口实现邮件发送功能,在SpringBoot2.X中也封装了发送邮件相关的Starter并且提供了自动化配置. 本文目录 一.添加对应的Starter二 ...

  5. php 利用curl_*测试数据并发

    工作时遇到一个数据并发问题,因为上线之前没有测试数据并发,导致有时候网络比较差的时候导致数据重复插入数据库 , 所以利用curl_*函数专门写了一个测试数据并发的测试用例,如下: function t ...

  6. paypal开发指南

    一.开发者地址: https://developer.paypal.com 使用在paypal上注册的账号登陆即可, 二.沙箱账号 paypay自动会为你创建两个沙箱账号,一个商家,一个买家.在acc ...

  7. HTML5新标签与特性---多媒体

    多媒体标签 embed:标签定义嵌入的内容 audio:播放音频 video:播放视频 多媒体 embed(会使用) embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.M ...

  8. JavaScript 错误异常

    JavaScript 错误异常 错误异常语句 try 语句测试代码块中的错误 catch 语句处理错误 throw 语句允许自定义错误 finally 语句在错误异常语句后,必须执行的代码块 try ...

  9. LED 控制卡 单元板 接口引脚定义

    LED 12接口 使能 <--- OE A ---> 行选择信号 N B ---> 行选择信号 N C ---> 行选择信号 N CLK ---> 时钟信号 N LAT/ ...

  10. ucoreOS_lab7 实验报告

    所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...