rapidjson简易使用封装方法

#ifndef rapidjson_utils_h__
#define rapidjson_utils_h__
#include "rapidjson/rapidjson.h"
#include "rapidjson/document.h"
#include "rapidjson/pointer.h"
#include "rapidjson/writer.h"
#include "rapidjson/prettywriter.h"
#include "rapidjson/error/en.h"
#include <string>
namespace MyJson
{
    using std::string;
    static int get_rapidjson_string(const rapidjson::Value& js_in,
        std::string key,
        std::string& value) {
        rapidjson::Pointer pointer(key.c_str());
        if (!pointer.IsValid()) {
            return -1;
        }
        const rapidjson::Value *pValue = rapidjson::GetValueByPointer(js_in, pointer);
        if (NULL == pValue || !pValue->IsString()) {
            return -1;
        }
        value = pValue->GetString();
        return 0;
    }
    static int get_rapidjson_int(const rapidjson::Value& js_in,
        std::string key,
        int& value) {
        rapidjson::Pointer pointer(key.c_str());
        if (!pointer.IsValid()) {
            return -1;
        }
        const rapidjson::Value *pValue = rapidjson::GetValueByPointer(js_in, pointer);
        if (NULL == pValue || !pValue->IsNumber()) {
            return -1;
        }
        value = pValue->GetInt();
        return 0;
    }
    ///< get float number
    static int get_rapidjson_number(const rapidjson::Value& js_in,
        std::string key,
        float& value) {
        rapidjson::Pointer pointer(key.c_str());
        if (!pointer.IsValid()) {
            return -1;
        }
        const rapidjson::Value *pValue = rapidjson::GetValueByPointer(js_in, pointer);
        if (NULL == pValue || !pValue->IsNumber()) {
            return -1;
        }
        rapidjson::Type valueType = pValue->GetType();
        switch (valueType) {
        case rapidjson::Type::kNumberType:
            value = pValue->GetDouble();
            break;
        default:
            return -1;
        }
        return 0;
    }
    static int get_rapidjson_bool(const rapidjson::Value& js_in,
        std::string key,
        bool& value) {
        rapidjson::Pointer pointer(key.c_str());
        if (!pointer.IsValid()) {
            return -1;
        }
        const rapidjson::Value *pValue = rapidjson::GetValueByPointer(js_in, pointer);
        if (NULL == pValue || !pValue->IsBool()) {
            return -1;
        }
        value = pValue->GetBool();
        return 0;
    }
    static void add_member_string(rapidjson::Value& node, string key, string value, rapidjson::Document::AllocatorType &alloc) {
        node.AddMember(rapidjson::Value(key.c_str(), key.length(), alloc).Move(),
            rapidjson::Value(value.c_str(), value.length(), alloc).Move(), alloc);
    }
    static void add_member_int(rapidjson::Value& node, string key, int value,
        rapidjson::Document::AllocatorType &alloc) {
        node.AddMember(rapidjson::Value(key.c_str(), key.length(), alloc).Move(),
            rapidjson::Value(value).Move(), alloc);
    }
    static void add_member_float(rapidjson::Value& node, string key, double value,
        rapidjson::Document::AllocatorType &alloc) {
        node.AddMember(rapidjson::Value(key.c_str(), key.length(), alloc).Move(),
            rapidjson::Value(value).Move(), alloc);
    }
    static void add_member_bool(rapidjson::Value& node, string key, bool value,
        rapidjson::Document::AllocatorType &alloc) {
        node.AddMember(rapidjson::Value(key.c_str(), key.length(), alloc).Move(),
            rapidjson::Value(value).Move(), alloc);
    }
    static string to_string(const rapidjson::Value& v) {
        rapidjson::StringBuffer sb;
        rapidjson::Writer<rapidjson::StringBuffer> writer(sb);
        v.Accept(writer);
        std::string sResult = sb.GetString();
        return sResult;
    }
    static string to_styled_string(const rapidjson::Value& v) {
        rapidjson::StringBuffer sb;
        rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(sb);
        v.Accept(writer);
        std::string s = sb.GetString();
        return s;
    }
} //namespace utils
#endif // rapidjson_utils_h__
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值