在rapidjson中使用AddMember获取Null值

时间:2017-03-14 07:13:03

标签: c++ rapidjson

我正在尝试使用RapidJson和VC ++创建json字符串。以下是我的代码:

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中的两个键中添加一个值。 提前谢谢。

1 个答案:

答案 0 :(得分: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());