2017-06-17 84 views
0

我目前正在使用rapidjson在C++中进行项目工作。替换rapidjson中的成员的值

我的程序在包含一些验证细节的套接字上接收到一些JSON数据。我登录传入的消息,但我想隐藏密码,以便在日志文件中看不到它。所以我试图获取JSON对象,并替换字符串的每个字符,并将这个替换的字符串放回密码所在的json对象中。

下面是我的代码:

rapidjson::Document jsonObject; 
      jsonObject.Parse(command.c_str()); 

      string method = jsonObject["method"].GetString(); 

      if (jsonObject.HasMember("sshDetails")) 
      { 
       Value& sshDetails = jsonObject["sshDetails"]; 
       string sshPassword = sshDetails["sshPassword"].GetString(); 

       for (int i = 0; i < sshPassword.length(); i++) 
       { 
        sshPassword[i] = '*'; 
       } 

       rapidjson::Value::Member* sshPasswordMember = sshDetails.FindMember("sshPassword"); 
       sshPasswordMember->name.SetString(sshPassword.c_str(), jsonObject.GetAllocator()); 

       //Convert it back to a string 
       rapidjson::StringBuffer buffer; 
       buffer.Clear(); 
       rapidjson::Writer<rapidjson::StringBuffer>writer(buffer); 
       Document jsonDoc; 
       jsonDoc.Accept(writer); 
       string jsonString = string(buffer.GetString()); 

我在下面的行收到一个错误:

rapidjson::Value::Member* sshPasswordMember = sshDetails.FindMember("sshPassword"); 

我得到的错误是:

No suitable conversion function from rapidjson::GenericMemberIterator<false, rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CtrlAllocator>> to rapidjson::GenericMember::UTF8<char>, myProject...SocketProcessor.cpp 
rapidjson::MemoryPoolAllocator<rapidjson::CtrlAllocator>>*exists 

我从SO上的另一个问题上的例子中得到了上述结果,这是从rapidjson - change key to another value接受的答案,所以什么是我想念。

回答

0

我已经设法找到答案这与一点点玩和运气。

我改变

rapidjson::Value::Member* sshPasswordMember = sshDetails.FindMember("sshPassword"); 
sshPasswordMember->name.SetString(sshPassword.c_str(), jsonObject.GetAllocator()); 

rapidjson::Value::MemberIterator sshPasswordMember = sshDetails.FindMember("sshPassword"); 
sshPasswordMember->value.SetString(sshPassword.c_str(), jsonObject.GetAllocator());