在rapidjson

时间:2017-06-17 13:05:45

标签: c++ json

我目前正在使用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的接受答案,所以我错过了什么。

2 个答案:

答案 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而不是指定类型来忽略许多此类问题