2017-03-14 6 views
0

RapidJsonとVC++を使用してjson文字列を作成しようとしています。以下は私のコードです: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()); 

私はそれを変更していないにもかかわらず、wImplValを使用して、NULL値二時間を取得しています。 rapidjsonの2つのキーに1つの値を追加するための特別な規則がありますか? ありがとうございます。

答えて

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()); 
関連する問題