我正在尝试使用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中的两个键中添加一个值。 提前谢谢。
答案 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());