rapidjson 简单封装
https://github.com/miloyip/rapidjson
简介
RapidJSON是一个C++的JSON解析器及生成器。它的灵感来自RapidXml。
RapidJSON小而全。它同时支持SAX和DOM风格的API。SAX解析器只有约500行代码。
RapidJSON快。它的性能可与strlen()相比。可支持SSE2/SSE4.2加速。
RapidJSON独立。它不依赖于BOOST等外部库。它甚至不依赖于STL。
RapidJSON对内存友好。在大部分32/64位机器上,每个JSON值只占16或20字节(除字符串外)。它预设使用一个快速的内存分配器,令分析器可以紧凑地分配内存。
RapidJSON对Unicode友好。它支持UTF-8、UTF-16、UTF-32 (大端序/小端序),并内部支持这些编码的检测、校验及转码。例如,RapidJSON可以在分析一个UTF-8文件至DOM时,把当中的JSON字符串转码至UTF-16。它也支持代理对(surrogate pair)及”\u0000”(空字符)。
代码块
@H_403_18@#include "json.h" #include <vector> #include <map> #include <iostream> #include <string> using namespace std; void map2obj() { Value v2(rapidjson::kObjectType); map<string,string> map_ss; string key = "key"; string val = "value"; map_ss[key] = val; json_map_obj(v2,map_ss); std::cout<<json_encode(v2)<<"\n"; } void vec2arr() { vector<std::string> vi; char c[] = "value1"; std::string str("value2"); vi.push_back(c); vi.push_back(str); json_mk_array(v1); // 生成数组对象 json_vector_array(v1,vi); // 将vi转换为 v1 std::cout<<json_encode(v1)<<"\n"; } void addmerber() { json_mk_obj(v3); json_add_member(v3,"zhao","xiaobiao"); // v3["xiao"] = "biao"; // 这个地方编译出错 operations [] 只有取操作 std::cout<<json_encode(v3)<<"\n"; } void push_back() { json_mk_array(v1); json_push_back(v1,"arr_number1"); json_push_back(v1,"arr_number2"); json_push_back(v1,"arr_number1"); std::cout<<json_encode(v1)<<"\n"; json_arr_erase(v1,"arr_number1"); std::cout<<json_encode(v1)<<"\n"; json_arr_erase_all(v1,"arr_number1"); std::cout<<json_encode(v1)<<"\n"; json_mk_array(v2); json_push_back(v2,1); json_push_back(v2,2); std::cout<<json_encode(v2)<<"\n"; json_arr_erase(v2,1); std::cout<<json_encode(v2)<<"\n"; } void make_json() { json_mk_obj(o); json_mk_array(a); json_push_back(a,33); std::cout<<json_encode(a)<<"\n"; json_mk_array(aa); json_push_back(aa,a); std::cout<<json_encode(aa)<<"\n"; json_add_member(o,"arr",aa); json_add_member(o,"add",std::string("adddf")); std::cout<<json_encode(o)<<"\n"; } unsigned int deep = 10; void recursion(Value &a) { if(deep--) { json_mk_array(aa); recursion(aa); json_push_back(a,aa); return; } json_push_back(a,"value"); } int main() { map2obj(); vec2arr(); addmerber(); push_back(); make_json(); json_mk_array(a); recursion(a); std::cout<<json_encode(a)<<"\n"; return 0; } @H_403_18@{"key":"value"} ["value1","value2"] {"zhao":"xiaobiao"} ["arr_number1","arr_number1","arr_number2","arr_number1"] ["arr_number1","arr_number1"] ["arr_number2"] [1,2] [2] [33] [[33]] {"arr":[[33]],"add":"adddf"} [[[[[[[[[[["value"]]]]]]]]]]]经过一次简单的封装之后用起来是不是要比直接操作 rapidjson API更加清爽一点呢?
代码下载地址
http://download.csdn.net/detail/tangliguantou/9553391