RapidJson基础应用

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/PrettyWriter.h"
#include <fstream>
 
int main()
{
      rapidjson::Document doc;
      doc.SetObject();
      rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();
 
	  rapidjson::Value obj1(rapidjson::kObjectType);
	  obj1.AddMember("key12", 2, allocator);
	  rapidjson::Value obj(rapidjson::kObjectType);

	  int num = 121;
	  obj.AddMember("key1", num, allocator);//数字类型
	  obj.AddMember("key3", obj1, allocator);//对象类型
	  obj.AddMember("key4", "str", allocator);//字符串类型

	  std::string cc = "strcc";
	  rapidjson::Value objstr(rapidjson::kStringType);
	  objstr.SetString(cc.c_str(), allocator);
	  obj.AddMember("key4", objstr, allocator);//字符串变量 不能直接传,常量可以


	  rapidjson::Value ObjectArray(rapidjson::kArrayType);//一个数组
	  rapidjson::Value objElem(rapidjson::kStringType);//数组元素
	  ObjectArray.PushBack(objElem, allocator);
	  obj.AddMember("array", ObjectArray, allocator);
 
      doc.AddMember("Double", obj, allocator);

	 //查询操作
	  //doc["Double"]["key4"] = 10;//必须保证所有键都存在,否则会报错
	  auto val = doc["Double"].GetInt();//返回key对应的值,不过必须HasMember来判断,否则key不存在会报异常
	  //HasMember判断key是否存在
	  bool res = doc.HasMember("key1");//返回true
	  res = doc["Double"].HasMember("key1");//返回false

	 //FindMember查找Key,并返回Key的迭代器
	  auto iter =   doc["Double"].FindMember("key1");
	  if(iter != doc["Double"].MemberEnd())//判断是否存在该key
	  {
		  int resVal = iter->value.GetInt();
	  }

	  //读文件
	  {
		  std::string Path("./ss.json");
		  std::ifstream in(Path.data()); // 文件的读取操作, copy的  不解释
		  if (in.is_open()) {

			  std::string json_content((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>()); //将文件的数据流转换位std::string类型
			  in.close();  // 关闭文件
			  doc.Parse(json_content.c_str());
		  }
	  }

	  //写文件
	  {
		  //无格式输出
		  rapidjson::StringBuffer strBuf;
		  rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);//非格式化
		  doc.Accept(writer);
		  string data = strBuf.GetString();

		  //带格式输出 
		  rapidjson::StringBuffer buffer;
		  rapidjson::PrettyWriter<rapidjson::StringBuffer> prettyWriter(buffer);  //格式化
		  doc.Accept(prettyWriter);  //将json的数据流写入 writer?
		  std::string content = buffer.GetString();

		  //写文件
		  std::string Path("./ss.json");  // 将文件顶层路径转换位std::string 类型
		  std::ofstream outfile;
		  outfile.open(Path.data());
		  if (outfile.is_open())
		  {
			  outfile << content;
			  outfile.close();
		  }
	  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值