首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换rapidjson中成员的值

替换rapidjson中成员的值
EN

Stack Overflow用户
提问于 2017-06-17 21:05:45
回答 2查看 5.8K关注 0票数 2

我目前正在使用rapidjson在C++上做一个项目。

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

下面是我的代码:

代码语言:javascript
复制
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());

我在下面的行上得到了一个错误:

代码语言:javascript
复制
rapidjson::Value::Member* sshPasswordMember = sshDetails.FindMember("sshPassword");

我得到的错误是:

代码语言:javascript
复制
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的公认答案,所以我错过了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-18 03:44:43

我已经设法找到了这个问题的答案,靠的是一些技巧和运气。

我变了

代码语言:javascript
复制
rapidjson::Value::Member* sshPasswordMember = sshDetails.FindMember("sshPassword");
sshPasswordMember->name.SetString(sshPassword.c_str(), jsonObject.GetAllocator());

成为

代码语言:javascript
复制
rapidjson::Value::MemberIterator sshPasswordMember = sshDetails.FindMember("sshPassword");
sshPasswordMember->value.SetString(sshPassword.c_str(), jsonObject.GetAllocator());
票数 4
EN

Stack Overflow用户

发布于 2018-09-12 21:57:57

在我的项目中使用rapidjson,我发现许多这样的问题可以通过使用auto而不是指定类型来省略

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44604978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档