Rapidjson object cannot convert to json string?

I setup a rapidjson object and want to convert to json string:

rapidjson::Document doc;
doc.SetObject();
doc["test"].SetInt(2);
    
rapidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer(sb);
doc.Accept(writer);
std::string st=sb.GetString();
CCLOG("%s",st.c_str());

but the output is

{}

not

{
  "test":2
}

why?

I didn’t test it, but try something like this:

rapidjson::Document doc;
doc.SetObject();
doc.AddMember("test", 2, doc.GetAllocator());
GenericStringBuffer< UTF8<> > buffer;
Writer< GenericStringBuffer< UTF8<> > > writer(buffer);     
doc.Accept(writer);
std::string st=buffer.GetString();
CCLOG("%s",st.c_str());

Best way to convert object to json using rapidjson.

// document is the root of a json message
rapidjson::Document document;
// define the document as an object rather than an array
document.SetObject();

// must pass an allocator when the object may need to allocate memory
rapidjson::Document::AllocatorType& allocator = document.GetAllocator();

//valuemap is dictionray
__Array *keys = valuemap->allKeys();
Ref *key;

CCARRAY_FOREACH(keys, key){
    __String *keyString = (__String *)key;
    
     Ref* object = valuemap -> objectForKey(keyString->getCString());
    __Dictionary *dict = dynamic_cast<__Dictionary*>(object);
    __Array *array = dynamic_cast<__Array*>(object);

    if (dict) {
        rapidjson::Value object(rapidjson::kObjectType);
        __Array *objectkeys = dict->allKeys();
        Ref *secondkey;
        CCARRAY_FOREACH(objectkeys, secondkey){
            __String *objectKeyString = (__String *)secondkey;
            __String *objectString = (__String *)dict -> objectForKey(objectKeyString->getCString());
            object.AddMember(objectKeyString->getCString(), objectString->getCString(), allocator);
        }
        document.AddMember(keyString->getCString(), object, allocator); 
    }
    else
    {
         __String *objectString = (__String *)valuemap -> objectForKey(keyString->getCString());

        document.AddMember(keyString->getCString(),objectString->getCString() , allocator);
    }

}

StringBuffer strbuf;
Writer<StringBuffer> writer(strbuf);
document.Accept(writer);

log("JsonData = %s", strbuf.GetString());
std::string json = std::string(strbuf.GetString());
return json;