自定义json工具类 C++

class tool_json
{
public:
    static bool try_get_iter(const char* key, const rapidjson::Value& node,
                             rapidjson::Value::ConstMemberIterator& out_iter)
    {
        if(node.IsObject())
        {
            out_iter = node.FindMember(key);
            if(node.MemberEnd() == out_iter)
            {
                return false;
            }

            return true;
        }

        return false;
    }

    static bool try_get_value(int& d, const char* key, const rapidjson::Value& node)
    {
        rapidjson::Value::ConstMemberIterator iter;
        if(try_get_iter(key, node, iter))
        {
            if(iter->value.IsInt())
            {
                d = iter->value.GetInt();
                return true;
            }
        }

        return false;
    }

    static bool try_get_value(uint64_t& d, const char* key, const rapidjson::Value& node)
    {
        rapidjson::Value::ConstMemberIterator iter;
        if(try_get_iter(key, node, iter))
        {
            if(iter->value.IsUint64())
            {
                d = iter->value.GetUint64();
                return true;
            }
        }
        return false;
    }

    static bool try_get_value(double& d, const char* key, const rapidjson::Value& node)
    {
        rapidjson::Value::ConstMemberIterator iter;
        if(try_get_iter(key, node, iter))
        {
            if(iter->value.IsDouble())
            {
                d = iter->value.GetDouble();
                return true;
            }
        }
        return false;
    }

    static bool try_get_value(std::string& d, const char* key, const rapidjson::Value& node)
    {
        rapidjson::Value::ConstMemberIterator iter;
        if(try_get_iter(key, node, iter))
        {
            if(iter->value.IsString())
            {
                d = iter->value.GetString();
                return true;
            }
        }

        return false;
    }

    static int get_value(const char* key, const int& default_data, const rapidjson::Value& node)
    {
        rapidjson::Value::ConstMemberIterator iter;
        if(try_get_iter(key, node, iter))
        {
            if(iter->value.IsInt())
            {
                return  iter->value.GetInt();
            }
        }

        return default_data;
    }

    static std::string get_value(const char* key, const std::string& default_data, const rapidjson::Value& node)
    {
        rapidjson::Value::ConstMemberIterator iter;
        if(try_get_iter(key, node, iter))
        {
            if(iter->value.IsString())
            {
                return iter->value.GetString();
            }
        }

        return default_data;
    }

    static std::string doc_to_json(rapidjson::Document& doc)
    {
        rapidjson::StringBuffer sb;
        rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(sb);
        doc.Accept(writer);

        return sb.GetString();
    }
};
 

猜你喜欢

转载自blog.csdn.net/f110300641/article/details/82586865