2017-03-14 19 views
0

RapidJson 및 VC++를 사용하여 json 문자열을 만들려고합니다. 나는 그것을 수정되지 않은 경우에도 wImplVal 사용에 NULL 값이 두 번째 시간을 얻고있다 rapidjson에서 AddMember를 사용할 때 Null 값 가져 오기

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()); 

: 다음은 내 코드입니다. rapidjson의 두 키에 하나의 값을 추가하는 몇 가지 특별한 규칙이 있습니까? 미리 감사드립니다. 주의 깊게 this을 읽으면

답변

2

, 특히 당신이 AddMember에 전달할 때, 그것은 기존 값을 이동하고 Null으로 대체합니다, 당신은 rapidjson 값이 아니라, 의미를 이동, 사용하는 알아낼 수 섹션을 "의미를 이동".

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());