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”(空字符)。
代码块
#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;
}
{"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