RapidJson的使用

rapidJson的使用

写Json:创建一个简单的json结构

方式一:使用rapidjson
	#define JSON_KEY_NAME_CONTENT "body"
	#define JSON_KEY_NAME_DATATYPE "type"
	#define JSON_KEY_REPORT_NAME_ACTIONRESULT "ActionRes"
	#define JSON_DATA_TYPE_WEAK_PASSWORD_OPTION_CHANGE "reportWeakPasswordOptionChange"

	rapidjson::StringBuffer reportBuff;
	rapidjson::Writer<rapidjson::StringBuffer> reportwriter(reportBuff);
	reportwriter.StartObject();
	reportwriter.Key(JSON_KEY_NAME_CONTENT);
	reportwriter.StartArray();
	reportwriter.StartObject();
	reportwriter.Key(JSON_KEY_REPORT_NAME_ACTIONRESULT);
	reportwriter.Int(ret);
	reportwriter.EndObject();
	reportwriter.EndArray();
	reportwriter.Key(JSON_KEY_NAME_DATATYPE);
	reportwriter.String(JSON_DATA_TYPE_WEAK_PASSWORD_OPTION_CHANGE);
	reportwriter.EndObject();
	std::string jsonstring = reportBuff.GetString()//改部分是将json转换为char *;

最后构建的结果
一个object
一个jsonobject中有两个对象,body为数组,type为string。
注意StartObject和EndObject,以及StartArray和EndArray需要成对出现。

方式二:使用AddMember增加元素
		rapidjson::Document jsonDoc;    //生成一个dom元素Document
		rapidjson::Document::AllocatorType &allocator = jsonDoc.GetAllocator(); //获取分配器
		jsonDoc.SetObject();    //将当前的Document设置为一个object,也就是说,整个Document是一个Object类型的dom元素
		jsonDoc.AddMember("ReplyTo", rapidjson::StringRef("test string"), allocator);
		jsonDoc.AddMember("Body", rapidjson::StringRef(""), allocator);
		int s = 10;
		jsonDoc.AddMember("Score",s,allocator);
		rapidjson::StringBuffer strBuf;
		rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
		jsonDoc.Accept(writer);
		std::string data = std::string(strBuf.GetString());

这是从别的地方抄过来的一个例子,用来添加数组

	rapidjson::Value object(rapidjson::kObjectType); // 创建对象
	bject.AddMember("int", 1, allocator);         // 添加 "int" : 1
    object.AddMember("double", 1.1, allocator);    // 添加 "double" : 1.1
    object.AddMember("hello", "world", allocator); // 添加 "hello" : "world"
    
    //[4.2] 往json数组中添加数据:值
    rapidjson::Value array(rapidjson::kArrayType); // 创建数组
    rapidjson::Value str(rapidjson::kStringType);  // 字符串
    rapidjson::Value obj(rapidjson::kObjectType);  // 对象
    str.SetString("hello"); // 设置str的值
    obj.AddMember("name", "alice", allocator);
    obj.AddMember("age", 23, allocator);

    array.PushBack(123, allocator);   // 添加数字
    array.PushBack("888", allocator); // 添加字符串,方式一
    array.PushBack(str, allocator);   // 添加字符串,方式二
    array.PushBack(obj, allocator);   // 添加对象
    //[4.3] 往对象格式的json文件中添加数据
    d.AddMember("hello", "world", allocator);
    d.AddMember("object", object, allocator);
    d.AddMember("array", array, allocator);

在这里插入图片描述

读Json

Json数据格式
在这里插入图片描述
数据分析:moudleList是一个json数组,其中有四个object,每个object中有两个元素

void HandleJsonData(std::string &data){
	std::string stringType = "";
	rapidjson::Document doc;
	doc.Parse(data.c_str());
	if (doc.HasParseError())  
	{
		int ret1 = doc.HasParseError();
		return false;  
	}
	rapidjson::Value &module = doc["moudleList"];
	if (module.IsArray())
	{
		for (int i =0;i<module.Size();i++)
		{
			rapidjson::Value &reportdata = module[i]["reportData"];
			if (reportdata.IsArray())
			{
				std::string tmp = reportdata[0].GetString();

				rapidjson::Document datajson;
				if (datajson.Parse(tmp.c_str()).HasParseError())  
				{
					locallog.WriteLogAndConsole(LOG_DEBUG,"[%s] doc parse error  \r\n",__FUNCTION__);
					return false;  
				}
				if(doc.HasMember("type")){		
					stringType = doc["type"].GetString();
				}else{
					return false;
				}
				rapidjson::Value &body = doc["body"];
				if (body.IsArray())
				{
					body[0]["ActionRes"].GetInt();
				}
			}
		}
}

Json转string操作

std::string JsonToString(const rapidjson::Value& valObj)
{
	rapidjson::StringBuffer sbBuf;
	rapidjson::Writer<rapidjson::StringBuffer> jWriter(sbBuf);
	valObj.Accept(jWriter);
	return std::string(sbBuf.GetString());
}

参考文章:
1、Json数据操作

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值