rapidjson 简单封装

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”(空字符)。

代码块

代码块语法遵循标准markdown代码,例如:

#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_number1");
    json_push_back(v1, "arr_number1");
    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_number1","arr_number1","arr_number2","arr_number1"]
["arr_number1","arr_number1","arr_number1","arr_number2","arr_number1"]
["arr_number2"]
[1,2]
[2]
[33]
[[33]]
{"arr":[[33]],"add":"adddf"}
[[[[[[[[[[["value"]]]]]]]]]]]

经过一次简单的封装之后用起来是不是要比直接操作 rapidjson API更加清爽一点呢?

代码下载地址
http://download.csdn.net/detail/tangliguantou/9553391

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值