rapidjson 简单封装

前端之家收集整理的这篇文章主要介绍了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_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

原文链接:https://www.f2er.com/json/289321.html

猜你在找的Json相关文章