我目前正在使用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我从另一个问题上的例子中提取了上面的内容,这是来自rapidjson - change key to another value的公认答案,所以我错过了什么。
发布于 2017-06-18 03:44:43
我已经设法找到了这个问题的答案,靠的是一些技巧和运气。
我变了
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());发布于 2018-09-12 21:57:57
在我的项目中使用rapidjson,我发现许多这样的问题可以通过使用auto而不是指定类型来省略
https://stackoverflow.com/questions/44604978
复制相似问题