测试小站: 处理网 回收帮 培训网 富贵论坛 老富贵论坛

rapidjson和rapidjson源代码分析

  rapidjson

  rapidjson是C++的json读写库,它虽然开源的,但是功能强大,能满足项目开发要求。VC++里使用rapidjson,包含头文件后就可以使用,我把头文件直接放到项目里使用,对#include语句还进行了处理,把<>包含改为了""包含,省去了在VC里指定包含目录的处理。

  rapidjson的突出特点就是效率,在它的官网上有和其它开源项目的效率的对比表。在国外英文网站上也有对rapidjson的推荐。

  rapidjson开源

  因为前面用了jsoncpp,所以也想套用[]的使用方式,但是发现rapidjson没有,用的是函数为主的模式。国内网站上也有大把的基本用法代码,这里列举出一些我摸索出来的用法,贡献给大家。

  //向json值里添加个属性,一参为分配器,二参为值,三参为属性名,四参为属性值

  void AddRapidString(rapidjson::Document::AllocatorType& alc,rapidjson::Value &vin,std::string sname,std::string svalue)

  {

  // rapidjson::Value str_value(rapidjson::kStringType);

  // str_value.SetString(svalue.c_str(), svalue.size());//以前用这段代码添加文本,但是实际加不上去,也处理不了中文

  //if(!str_value.IsNull())

  {

  //一参的名称必须这么处理,不处理会有编译错误,属性名也加不进去

  vin.AddMember(rapidjson::Value(sname.c_str(), alc), svalue, alc);//把值变量放到二参,可以保存上,也可以处理中文

  }

  }

  添加属性、判断属性和获取属性值字符串代码

  AddRapidString(allocator,d,"we","虚");

  if(d.HasMember("we"))

  AfxMessageBox(_T("Yes"));

  std::string swe=d["we"].GetString();

  json编译错误

  不能将参数 1 从“std::string”转换为“rapidjson::GenericValue,加RAPIDJSON_HAS_STDSTRING此宏解决 ,不过加了后,#if语句会报错,需要加上#if defined()来纠正。

  rapidjson非法操作

  Document不能直接AddMember,说不是Object。如果开始没用构造函数参数来指定对象类型,可以用SetObject()函数调用来指定成对象,这样就可以用AddMember了。

  rapidjson源代码分析

  用了大量的模板,一般人不容易看明白。

  另外通过监视看它的变量,里面的成员也很奇怪,不能轻易明白成员的意思,总之觉得比jsoncpp还要复杂。

posted @ 2021-12-25 14:10  linjingyg  阅读(385)  评论(0)    收藏  举报