2017-03-14 49 views
0

我正在嘗試使用RapidJson和VC++創建json字符串。下面是我的代碼:在rapidjson中使用AddMember獲取空值

WDocument saveDoc; 
WValue settingDoc(kObjectType); 
settingDoc.AddMember("BOOK_ID", "456723", saveDoc.GetAllocator()); 
settingDoc.AddMember("BOOK_FOUND", true, saveDoc.GetAllocator()); 
WValue wImplVal; 
wImplVal.SetString(BookName, saveDoc.GetAllocator()); //TCHAR BookName[MAX_PATH] 
settingDoc.AddMember("BOOK_NAME", wImplVal, saveDoc.GetAllocator());  //gets correct book name 
settingDoc.AddMember("BOOK_NICK_NAME",wImplVal,saveDoc.GetAllocator());//gets null value in wImplVal 
saveDoc.SetObject();  
saveDoc.AddMember("BOOK_INFO", settingDoc, saveDoc.GetAllocator()); 

我收到NULL值第二次,使用wImplVal即使我沒有修改它。 我們是否有一些特殊的規則用於在rapidjson中的兩個鍵中添加一個值。 在此先感謝。

回答

2

如果你仔細閱讀this,尤其是「移動語義」部分,你可以弄清楚,rapidjson值使用,那麼,移動語義,所以當你把它傳遞給AddMember,就會離開現有的價值,並與Null替換它。

由於RapidJSON支持C++ 03,它採用了使用賦值運算符的移動語義以及所有其他修改函數,如AddMember(),PushBack()。

因此,你必須再次設置值,以得到你想要的。

WDocument saveDoc; 
WValue settingDoc(kObjectType); 
settingDoc.AddMember("BOOK_ID", "456723", saveDoc.GetAllocator()); 
settingDoc.AddMember("BOOK_FOUND", true, saveDoc.GetAllocator()); 
WValue wImplVal; 
wImplVal.SetString(BookName, saveDoc.GetAllocator()); //TCHAR BookName[MAX_PATH] 
settingDoc.AddMember("BOOK_NAME", wImplVal, saveDoc.GetAllocator());  //gets correct book name 
wImplVal.SetString(BookName, saveDoc.GetAllocator()); 
settingDoc.AddMember("BOOK_NICK_NAME",wImplVal,saveDoc.GetAllocator());//gets null value in wImplVal 
saveDoc.SetObject();  
saveDoc.AddMember("BOOK_INFO", settingDoc, saveDoc.GetAllocator());