3
我試圖創建一個使用rapidjson的JSON,我遇到了一些意想不到的問題,無法生成正確的輸出。rapidjson正確的JSON創建
我創建和填充像這樣的文件:
Document d;
d.SetObject();
rapidjson::Document::AllocatorType& allocator = d.GetAllocator();
size_t sz = allocator.Size();
d.AddMember("version", 1, allocator);
d.AddMember("testId", 2, allocator);
d.AddMember("group", 3, allocator);
d.AddMember("order", 4, allocator);
Value tests(kArrayType);
Value obj(kObjectType);
Value val(kObjectType);
obj.AddMember("id", 1, allocator);
string description = "a description";
val.SetString(description.c_str(), static_cast<SizeType>(description.length()), allocator);
obj.AddMember("description", val, allocator);
string help = "some help";
val.SetString(help.c_str(), static_cast<SizeType>(help.length()), allocator);
obj.AddMember("help", val, allocator);
string workgroup = "a workgroup";
val.SetString(workgroup.c_str(), static_cast<SizeType>(workgroup.length()), allocator);
obj.AddMember("workgroup", val, allocator);
val.SetBool(true);
obj.AddMember("online", val, allocator);
tests.PushBack(obj, allocator);
d.AddMember("tests", tests, allocator);
// Convert JSON document to string
rapidjson::StringBuffer strbuf;
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(strbuf);
d.Accept(writer);
當我運行這段代碼,我期待獲得此JSON:
{
"version": 1,
"testId": 2,
"group": 3,
"order": 4,
"tests": [
{
"id": 1,
"description": "a description",
"help": "some help",
"workgroup": "a workgroup",
"online": true
}
]
}
但實際產生的輸出...
{
"version": 1,
"testId": 2,
"group": 3,
"order": 4,
"tests": [
{
"id": 1,
"description": "a description",
"help": "some help",
"workgroup": "a workgroup",
"online": tr{
"version": 1,
"testId": 2,
"group": 3,
"order": 4,
"tests": [
{
"id": 1,
"description": "a description",
"help": "some help",
"workgroup": "a workgroup",
"online": true
}
]
}
任何想法?
你是否必須這樣做''allocator''魔術?還是有重載,你可以在沒有它們的情況下構建DOM?我的直覺告訴我,這看起來有點偏離。 – BitTickler
除此之外,您多次重複使用相同的''val''實例。也許這是一個非使用案例。 – BitTickler
從我可以告訴我,我只能從SetString調用中刪除分配器,並沒有任何效果。關於重複使用val,我已經嘗試過不重用它,結果也是一樣的。 –