精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
rapidjson是C++的json读写库,它虽然开源的,但是功能强大,能满足项目开发要求。VC++里使用rapidjson,包含头文件后就可以使用,我把头文件直接放到项目里使用,对#include语句还进行了处理,把<>包含改为了""包含,省去了在VC里指定包含目录的处理。
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();
不能将参数 1 从“std::string”转换为“rapidjson::GenericValue<Encoding>,加RAPIDJSON_HAS_STDSTRING此宏解决 ,不过加了后,#if语句会报错,需要加上#if defined()来纠正。
Document不能直接AddMember,说不是Object。如果开始没用构造函数参数来指定对象类型,可以用SetObject()函数调用来指定成对象,这样就可以用AddMember了。
用了大量的模板,一般人不容易看明白。
另外通过监视看它的变量,里面的成员也很奇怪,不能轻易明白成员的意思,总之觉得比jsoncpp还要复杂。
这里推出锐英源的国外内容翻译文章、rapidjson使用技巧和rapidjson代码理解文档,欢迎同行交流。