rapidjson和rapidjson源代码分析
rapidjson
rapidjson是C++的json读写库,它虽然开源的,但是功能强⼤,能满⾜项⽬开发要求。VC++⾥使⽤rapidjson,包含头⽂件后就可以使⽤,我把头⽂件直接放到项⽬⾥使⽤,对#include语句还进⾏了处理,把<>包含改为了""包含,省去了在VC⾥指定包含⽬录的处理。
rapidjson的突出特点就是效率,在它的官⽹上有和其它开源项⽬的效率的对⽐表。在国外英⽂⽹站上也有对rapidjson的推荐。
rapidjson开源
因为前⾯⽤了jsoncpp,所以也想套⽤[]的使⽤⽅式,但是发现没有,⽤的是函数为主的模式。国内⽹站上也有⼤把的基本⽤法代码,这⾥列举出⼀些我摸索出来的⽤法,贡献给⼤家。
//向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还要复杂。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论