Tencent / rapidjson

A fast JSON parser/generator for C++ with both SAX/DOM style API
http://rapidjson.org/
Other
14.17k stars 3.52k forks source link

Provide another example for the DOM parser #602

Open mweisshaupt1988 opened 8 years ago

mweisshaupt1988 commented 8 years ago

Please provide an example how to create a JSON string with the DOM parser without parsing a string first. It took me some time to notice that I have to call document.SetObject(); to initialize the document :smiley:

Here is some example code that I wrote as part of my test if the library supports everything that I need:

rapidjson::Document document;
document.SetObject();
rapidjson::Document::AllocatorType& allocator = document.GetAllocator();

document.AddMember("Time", "13:37", allocator);
document.AddMember("Date", "01.01.2016", allocator);

rapidjson::Value dataObject(rapidjson::kObjectType);
dataObject.AddMember("FullName", "A simple Test project", allocator);
dataObject.AddMember("ProjectName", "Simple", allocator);
document.AddMember("data", dataObject, allocator);

rapidjson::Value moreData(rapidjson::kArrayType);
for (int i = 0; i < 500; i++)
{
    moreData.PushBack(i, allocator);
}
document.AddMember("counter", moreData, allocator);

rapidjson::Value permissionsObject(rapidjson::kObjectType);
permissionsObject.AddMember("readable", true, allocator);
permissionsObject.AddMember("writable", true, allocator);
permissionsObject.AddMember("executable", false, allocator);
document.AddMember("permissions", permissionsObject, allocator);

rapidjson::Value messagesObject(rapidjson::kArrayType);
for (int i = 0; i < 10; i++)
{
    rapidjson::Value loopObject(rapidjson::kObjectType);
    loopObject.AddMember("Message", "Some text here...", allocator);
    loopObject.AddMember("Timestamp", 1234567890, allocator);
    loopObject.AddMember("Var1", "Some", allocator);
    loopObject.AddMember("Var2", "other", allocator);
    loopObject.AddMember("Var3", "stuff", allocator);
    loopObject.AddMember("Var4", "here", allocator);
    loopObject.AddMember("Var 5", "...", allocator);
    messagesObject.PushBack(loopObject, allocator);
}
document.AddMember("message", messagesObject, allocator);

rapidjson::StringBuffer buffer;
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
document.Accept(writer);

const char* charBuffer = buffer.GetString();
printf(charBuffer);

You can use it in your example if you wish.

miloyip commented 8 years ago

You can also use Document document(kObjectType);.