我目前正在使用rapidjson在C ++中开展一个项目。
我的程序在套接字上接收一些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 :(得分: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());
答案 1 :(得分:0)
在我的项目中使用RapidJSON,我发现可以通过使用auto
而不是指定类型来忽略许多此类问题