rapidjson的学习及使用

Posted qq-354296528

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rapidjson的学习及使用相关的知识,希望对你有一定的参考价值。

首先,附上官方链接:
http://rapidjson.org/zh-cn/md_doc_tutorial_8zh-cn.html

使用rapidjson,主要是对json串进行解析和拼接,即反序列化(Deserialize)和序列化(serialize

 

反序列如下示例:

void DeserializeFunc(string json)
{
    //映射DOM
    doc.Parse<0>(json.c_str());
    if (doc.HasParseError())
    {
        return;
    }
    assert(doc.IsArray());//断言doc是不是数组格式数据
    for(size_t i = 0; i < doc.Size(); i++)
    {
        Value& obj = doc[i];
        if(obj.HasMember("Temperature") && obj["Temperature"].IsObject())//格式为对象时
        {
            Value& temp = obj["Temperature"];
            if(temp.HasMember("Metric") && temp["Metric"].IsObject())
            {
                Value& currTemp = temp["Metric"];
                if(currTemp.HasMember("Value") && currTemp["Value"].IsDouble())//格式为double时
                {
                    double currVal = currTemp["Value"].GetDouble();
                    currentInfo.temperature = currTemp["Value"].GetDouble();
                }
            }
        }
        if(obj.HasMember("Photos") && obj["Photos"].IsArray())//格式为数组时
        {

            Value& val = obj["Photos"];
            for(size_t i = 0; i< val.Size(); i++)
            {
                Value& photo = val[i];
                if(photo.HasMember("LandscapeLink") && photo["LandscapeLink"].IsString())//格式为string时
                {
                    string urlLink = photo["LandscapeLink"].GetString();
                    currentInfo.bgURL = photo["LandscapeLink"].GetString();
                    if(urlLink.length() > 0 && urlLink.find("_L_L") != string::npos )
                    {
                        break;
                    }
                }
            }
        }
    }
}

 

 

//序列化示例

 


string serialize_data(list<string> idsList)
{
    if(idsList.size() == 0)
    {
        return "";
    }

    list<string>::iterator it = idsList.begin();

    Document doc;    //序列化
    doc.SetObject();
    Document::AllocatorType &allocator = doc.GetAllocator();
    StringBuffer buffer;
    rapidjson::Value ids(kArrayType);

    while(it != idsList.end())
    {
        ids.PushBack(rapidjson::GenericStringRef<char>((*it).c_str()), allocator);
        it++;
    }

    doc.AddMember("ids", ids, allocator);

    Writer<StringBuffer> writer(buffer);
    doc.Accept(writer);
    return buffer.GetString();

 }

 

//对结果进行序列化处理,并返回处理后的json串
string deal_result_message(int ErrCode)
{
    Document doc;    //序列化
    doc.SetObject();
    Document::AllocatorType &allocator = doc.GetAllocator();
    StringBuffer buffer;

    doc.AddMember("error_code", ErrCode, allocator);
    doc.AddMember("error_msg", rapidjson::GenericStringRef<char>(getErrorMsg(ErrCode)), allocator);
    rapidjson::Value data(kObjectType);
    doc.AddMember("data", data, allocator);


    Writer<StringBuffer> writer(buffer);
    doc.Accept(writer);
    const char* sJson = buffer.GetString();
    return sJson;
}

 




























































































以上是关于rapidjson的学习及使用的主要内容,如果未能解决你的问题,请参考以下文章

RapidJSON简介及使用

RapidJSON解析数组

rapidjson 的封装学习

如何利用rapidjson修改json文件

rapidjson使用总结

rapidjson安装使用