01rapidJson学习之rapidJson的初始化

2023-10-27

01rapidJson学习之rapidJson的初始化

1 rapidJson的初始化
由于我们经常通过初始化添加值到string字符串中,所以这里封装成一个简单函数。

//rapidJson有3种初始化方式:
1)改造初始化。
2)set方法初始化。
3=号赋值。

//注意:
1)凡是调用AddMember函数(不管是doc还是kObjectType类型)添加对象,参2都必须使用Value类型,不能直接使用添加,否则报如下类似错误;int,bool这些非对象可以直接添加。例如doc.AddMember("errMsg", errMsg, a);//error
2)凡是初始化Value类型的是一个对象(容器),都必须加上分配器AllocatorType,否则报错,例如v3 = cid;是错误的,所以=号赋值一般是初始化int,bool这些非对象值。最好推荐使用构造。
3)凡是组装json格式即调用AddMember函数添加内容到doc,在此之前都必须设置doc.SetObject();
4)凡是在doc里添加复杂结构的,都需要在定义Value时注明是何种类型。这里的复杂结构一般是指数组和对象。(这一点是后面要用的)
例如:
Value a1(kArrayType);// 创建一个数组,必须注明,否则后面使用a1.PushBack操作a1时会报错。
Value o1(kObjectType);// 创建一个对象,必须注明,否则后面使用o1.AddMember操作o1时会报错。

上面很多时候错误都是一样的,只不过相应函数改变一下,上面这些坑我都基本踩过了,这里记录防止再踩。
在这里插入图片描述

//doc类型如下:
enum Type {
    kNullType = 0,      //!< null
    kFalseType = 1,     //!< false
    kTrueType = 2,      //!< true
    kObjectType = 3,    //!< object
    kArrayType = 4,     //!< array 
    kStringType = 5,    //!< string
    kNumberType = 6     //!< number
};

代码如下:

//Rapid的初始化和创建成员并返回添加的字符串
std::string RapidInit(rapidjson::Document &doc, int status, std::string errMsg, 
std::string cid, std::string para){

    //1 定义doc并获取该doc的分配器
    //Document doc;//参数代替
    Document::AllocatorType& a = doc.GetAllocator();
    doc.SetObject();//每次调用AddMember添加成员都必须设置,否则报错,很多错误是因这个原因引起.
    

    //2 将上面的值赋给Value的类型,共3种
    Value v1(status);				//1)构造初始化

    Value v2;						//2)set方法初始化(可以set成bool,int,string...)
    v2.SetString(errMsg.c_str(), a);

    Value v3;						//3)等号初始化
    //v3 = cid;                       //用对象容器例如string这些给Value赋值时必须加上分配器,否则等号重载报错,故这里报错
    v3.SetString(cid.c_str(), a);

    Value v4(para.c_str(), a);		//最好使用构造初始化,不过构造字符串时的参1为UTF<char>,需要转成const char*,参2为分配器

    //3 添加成员
    doc.AddMember("status", v1, a); //该函数为重载函数,一般看第一个重载即可,有三个参数,参1为keyName,参2为T v也就是Value类型的值,参3为分配器
    doc.AddMember("errMsg", v2, a);
    doc.AddMember("cid",    v3, a);
    doc.AddMember("para",   v4, a);

	//4 从doc中获取字符串,一般可以独立分开成类似打印函数.
	rapidjson::StringBuffer buffer;//画板
	rapidjson::Writer<StringBuffer> writer(buffer);//画家交给画板
	doc.Accept(writer);//利用画家将doc的内容画进画板

	return buffer.GetString();
 }

//Rapid的初始化和创建成员并返回添加的字符串
void test01(){

    rapidjson::Document doc;
	std::string init = RapidInit(doc, 0, "Ok", "123", "c++11");

	std::cout<< init <<std::endl;
}

初始化并不难,但是有些地方需要自己注意。
结果如下:
在这里插入图片描述

  • 这里记录一下使用VSCode编译时配置launch.json的调试路径miDebuggerPath,Windows下必须加上.exe否则无法匹配。
  • 并且如果在Windows下用的是git的bash,使用\的路径可能无法适配导致路径出错。
  • tasks.json的编译命令调试C++时必须时g++,不能是gcc,否则说你未定义一大堆,例如undefined std::cout。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

01rapidJson学习之rapidJson的初始化 的相关文章

随机推荐

  • Unity--上传、下载文件并保存到本地

    目录 1 上传文件到服务 2 传参下载到本地 3 直接下载 4 存本地 1 上传文件到服务 public void UpFileToServer StartCoroutine UpLoadFiles StartCoroutine UpLoa
  • jemalloc Linux 安装与使用方法

    jemalloc 在Github上开源了 你可以选择下载release 版本 或者直接clone 源码编译 我选择的是源码编译 clone 项目 git clone https github com jemalloc jemalloc gi
  • visual stdio报错集锦

    error C2220 警告被视为错误 没有生成 object 文件 C 报错 The build tools for v141 Platform Toolset v141 cannot be found vs错误 使用 简体中文GB231
  • 机器学习算法优缺点及适用场景总结

    文章目录 机器学习算法优缺点及适用场景总结 1 线性回归 1 LinearRegression 2 Ridge 3 Lasso 2 LR 逻辑回归 3 KNN 最近邻算法 4 朴素贝叶斯 5 SVM 支持向量机 6 决策树 7 RF 随机森
  • python转换函数使用_Python不使用int()函数把字符串转换为数字实例讲解

    Python不使用int 函数把字符串转换为数字 不使用int 函数的情况下把字符串转换为数字 如把字符串 12345 转换为数字12345 方法一 利用str函数 既然不能用int函数 那我们就反其道而行 用str函数找出每一位字符表示的
  • hikari配置断开重连_Spring boot 数据库连接断线重连问题

    问题描述 我正在做的这个项目 数据库是跨区并且不由自己管理的 防火墙会每隔一段时间就自动断开数据库连接 于是需要对application properties的datasource进行配置 Ps 我使用是mybatis连接数据库 配置及具体
  • MOSFET、IGBT的结构与工作原理详解

    来自百度百科 先学习一下MOSFET 图1是典型平面N沟道增强型NMOSFET的剖面图 它用一块P型硅半导体材料作衬底 在其面上扩散了两个N型区 再在上面覆盖一层二氧化硅 SiO2 绝缘层 最后在N区上方用腐蚀的方法做成两个孔 用金属化的方
  • 剑指Offer - 面试题27:二叉树的镜像

    题目 请完成一个函数 输入一棵二叉树 该函数输出它的镜像 二叉树节点的定义如下 typedef int TElemType 树结点的数据类型 目前暂定为整型 struct BianryTreeNode TElemType m nValue
  • unity手指触摸事件

    Unity 触屏操作 当将Unity游戏运行到IOS或Android设备上时 桌面系统的鼠标左键可以自动变为手机屏幕上的触屏操作 但如多点触屏等操作却是无法利用鼠标操作进行的 Unity的Input类中不仅包含桌面系统的各种输入功能 也包含
  • 龙芯mips64el -适配electron及打包

    背景 内网机器 uos龙芯版 一开始把项目从外网考过去 运行 electron报错 后来发现 electron 没有mips架构的 只能自己改造了 直接干货 记得给打上哦 1 从http www loongnix org index php
  • NFS Provisioner

    一个自动配置卷的程序 它使用现有的和已配置的nfs服务器支持通过持久卷动态配置kubernetes持久卷 持久卷被配置为 namespace namespace namespace pvcName pvName 注意使用这个组件必须要提前配
  • 服务架构基本概念

    单体 所有业务都集中在一个项目中开发一个服务然后打一个包部署 分布式 分布式是指将不同的业务分布在不同的地方 集群指的是将几台服务器集中在一起 实现同一业务 分布式的每一个节点 都可以做集群 而集群并不一定就是分布式的 把单体系统拆分多个子
  • nginx配置指南

    nginx conf配置 找到Nginx的安装目录下的nginx conf文件 该文件负责Nginx的基础功能配置 配置文件概述 Nginx的主配置文件 conf nginx conf 按以下结构组织 配置块 功能描述 全局块 与Nginx
  • 微服务学习资料(持续更新)

    文章目录 微服务学习资料 持续更新 微服务介绍 微服务架构模式 从单体架构到微服务架构 绞杀者模式 微服务API设计 微服务安全 认证与鉴权 微服务数据架构 微服务事务管理 CAP理论 分布式事务 Saga模式 服务网格 服务版本管理 架构
  • Tensorflow导入报"Failed to load the native TensorFlow runtime."解决方案

    问题描述 在ubuntu服务器端测试import tensorflow 导入正常 但是使用pycharm远程访问连接使用pycharm时 出现tensorflow环境出现问题 为什么 这和之前在服务器安装过程中导入pycharm出错的原因一
  • 【自监督学习】 MAE阅读笔记

    1 MAE Masked Autoencoders Are Scalable Vision Learners bert ViT MAE的主要目的是进行迁移学习的预训练 1 Abstract 随即盖住一些图片中的块 patches 并重建被盖
  • 解析创客教育活动所需的空间实践场

    创客教育不同于创客活动 如果只是以活动或竞赛的形式在学校里分发 那只是一种创客活动 并没有真正融入教育 在发展过程中 会出现过度的偏执和做事 或者过度的偏执学习 如何找到平衡是学校教育者的重要一环 创客教育 培养学生创新所需要的知识 能力和
  • 聊一聊Linux下进程隐藏的常见手法及侦测手段

    0x00 前言 进程隐藏是恶意软件隐藏自身痕迹逃避系统管理人员发现的常用伎俩之一 当然 安全防护人员有时候也会使用到 比如隐藏蜜罐中的监控进程而不被入侵者觉察等 笔者也曾在多次安全应急响应经历中遇到过多各式各样的进程隐藏伎俩 了解进程隐藏的
  • 【问题解决】Centos7 yum命令异常报错Could not retrieve mirrorlist http://mirrorlist.centos.org

    问题出现 在把虚拟机的ip改为静态ip之后 yum install就会出现这样子的问题 root etcd yum install y wget 已加载插件 fastestmirror Determining fastest mirrors
  • 01rapidJson学习之rapidJson的初始化

    01rapidJson学习之rapidJson的初始化 1 rapidJson的初始化 由于我们经常通过初始化添加值到string字符串中 所以这里封装成一个简单函数 rapidJson有3种初始化方式 1 改造初始化 2 set方法初始化