2017-03-14 34 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());