rapidjson将嵌套map转为嵌套json------人生苦短,我用rapidjson
看代码:
#include #include //请自己下载开源的rapidjson #include"rapidjson/prettywriter.h" #include"rapidjson/rapidjson.h" #include"rapidjson/document.h" #include"rapidjson/stringbuffer.h" #include"rapidjson/writer.h" #include"rapidjson/memorystream.h" usingnamespacestd; usingrapidjson::Document; usingrapidjson::StringBuffer; usingrapidjson::Writer; usingnamespacerapidjson; stringformJson(constmap&mInt,constmap&mString, conststring&strChild,constmap&mChildInt,constmap&mChildString) { Documentdocument; Document::AllocatorType&allocator=document.GetAllocator(); Valueroot(kObjectType); Valuechild(kObjectType); Valuekey(kStringType); Valuevalue(kStringType); //当前级别 for(map::const_iteratorit=mInt.begin();it!=mInt.end();++it) { key.SetString(it->first.c_str(),allocator); root.AddMember(key,it->second,allocator); } for(map::const_iteratorit=mString.begin();it!=mString.end();++it) { key.SetString(it->first.c_str(),allocator); value.SetString(it->second.c_str(),allocator); root.AddMember(key,value,allocator); } //孩子级别 if(!strChild.empty()) { for(map::const_iteratorit=mChildInt.begin();it!=mChildInt.end();++it) { key.SetString(it->first.c_str(),allocator); child.AddMember(key,it->second,allocator); } for(map::const_iteratorit=mChildString.begin();it!=mChildString.end();++it) { key.SetString(it->first.c_str(),allocator); value.SetString(it->second.c_str(),allocator); child.AddMember(key,value,allocator); } key.SetString(strChild.c_str(),allocator); root.AddMember(key,child,allocator); } StringBufferbuffer; Writerwriter(buffer); root.Accept(writer); returnbuffer.GetString(); } intmain(intargc,char*argv[]) { mapmInt; mInt["code"]=0; mInt["score"]=80; mapmString; mString["name"]="taoge"; mString["place"]="shenzhen"; stringstrChild="childNode"; mapmChildInt; mChildInt["code"]=0; mChildInt["score"]=100; mapmChildString; mChildString["name"]="taogeChild"; mChildString["place"]="shenzhen"; stringstrJson=formJson(mInt,mString, strChild,mChildInt,mChildString); cout< 结果: {"code":0,"score":80,"name":"taoge","place":"shenzhen","childNode":{"code":0,"score":100,"name":"taogeChild","place":"shenzhen"}} 另外,如果仅仅想有当前界别,那么,可以这么搞(C++默认参数搞起): #include #include //请自己下载开源的rapidjson #include"rapidjson/prettywriter.h" #include"rapidjson/rapidjson.h" #include"rapidjson/document.h" #include"rapidjson/stringbuffer.h" #include"rapidjson/writer.h" #include"rapidjson/memorystream.h" usingnamespacestd; usingrapidjson::Document; usingrapidjson::StringBuffer; usingrapidjson::Writer; usingnamespacerapidjson; mapg_mChildInt; mapg_mChildString; stringformJson(constmap&mInt,constmap&mString, conststring&strChild="",constmap&mChildInt=g_mChildInt,constmap&mChildString=g_mChildString) { Documentdocument; Document::AllocatorType&allocator=document.GetAllocator(); Valueroot(kObjectType); Valuechild(kObjectType); Valuekey(kStringType); Valuevalue(kStringType); //当前级别 for(map::const_iteratorit=mInt.begin();it!=mInt.end();++it) { key.SetString(it->first.c_str(),allocator); root.AddMember(key,it->second,allocator); } for(map::const_iteratorit=mString.begin();it!=mString.end();++it) { key.SetString(it->first.c_str(),allocator); value.SetString(it->second.c_str(),allocator); root.AddMember(key,value,allocator); } //孩子级别 if(!strChild.empty()) { for(map::const_iteratorit=mChildInt.begin();it!=mChildInt.end();++it) { key.SetString(it->first.c_str(),allocator); child.AddMember(key,it->second,allocator); } for(map::const_iteratorit=mChildString.begin();it!=mChildString.end();++it) { key.SetString(it->first.c_str(),allocator); value.SetString(it->second.c_str(),allocator); child.AddMember(key,value,allocator); } key.SetString(strChild.c_str(),allocator); root.AddMember(key,child,allocator); } StringBufferbuffer; Writerwriter(buffer); root.Accept(writer); returnbuffer.GetString(); } intmain(intargc,char*argv[]) { mapmInt; mInt["code"]=0; mInt["score"]=80; mapmString; mString["name"]="taoge"; mString["place"]="shenzhen"; stringstrJson=formJson(mInt,mString); cout< 结果: {"code":0,"score":80,"name":"taoge","place":"shenzhen"} 其实,上面的formJson函数,还可以继续扩展。 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
结果:
{"code":0,"score":80,"name":"taoge","place":"shenzhen","childNode":{"code":0,"score":100,"name":"taogeChild","place":"shenzhen"}}
另外,如果仅仅想有当前界别,那么,可以这么搞(C++默认参数搞起):
#include #include //请自己下载开源的rapidjson #include"rapidjson/prettywriter.h" #include"rapidjson/rapidjson.h" #include"rapidjson/document.h" #include"rapidjson/stringbuffer.h" #include"rapidjson/writer.h" #include"rapidjson/memorystream.h" usingnamespacestd; usingrapidjson::Document; usingrapidjson::StringBuffer; usingrapidjson::Writer; usingnamespacerapidjson; mapg_mChildInt; mapg_mChildString; stringformJson(constmap&mInt,constmap&mString, conststring&strChild="",constmap&mChildInt=g_mChildInt,constmap&mChildString=g_mChildString) { Documentdocument; Document::AllocatorType&allocator=document.GetAllocator(); Valueroot(kObjectType); Valuechild(kObjectType); Valuekey(kStringType); Valuevalue(kStringType); //当前级别 for(map::const_iteratorit=mInt.begin();it!=mInt.end();++it) { key.SetString(it->first.c_str(),allocator); root.AddMember(key,it->second,allocator); } for(map::const_iteratorit=mString.begin();it!=mString.end();++it) { key.SetString(it->first.c_str(),allocator); value.SetString(it->second.c_str(),allocator); root.AddMember(key,value,allocator); } //孩子级别 if(!strChild.empty()) { for(map::const_iteratorit=mChildInt.begin();it!=mChildInt.end();++it) { key.SetString(it->first.c_str(),allocator); child.AddMember(key,it->second,allocator); } for(map::const_iteratorit=mChildString.begin();it!=mChildString.end();++it) { key.SetString(it->first.c_str(),allocator); value.SetString(it->second.c_str(),allocator); child.AddMember(key,value,allocator); } key.SetString(strChild.c_str(),allocator); root.AddMember(key,child,allocator); } StringBufferbuffer; Writerwriter(buffer); root.Accept(writer); returnbuffer.GetString(); } intmain(intargc,char*argv[]) { mapmInt; mInt["code"]=0; mInt["score"]=80; mapmString; mString["name"]="taoge"; mString["place"]="shenzhen"; stringstrJson=formJson(mInt,mString); cout< 结果: {"code":0,"score":80,"name":"taoge","place":"shenzhen"} 其实,上面的formJson函数,还可以继续扩展。 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
{"code":0,"score":80,"name":"taoge","place":"shenzhen"}
其实,上面的formJson函数,还可以继续扩展。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接