amuse
1
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());
shauket
3
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;