C++ rapidjson-将密钥更改为另一个值

C++ rapidjson-将密钥更改为另一个值,c++,rapidjson,C++,Rapidjson,这是rapidjson的hello世界。如何将键“hello”更改为“再见”,并从json获取字符串?我的意思是我想解析json,更改一些键,然后像{“再见”:“world”}那样获取json字符串 const char json[]=“{\'hello\':\'world\'”; rapidjson::文档d; d、 解析(json); 或在迭代过程中: for (auto it = d.MemberBegin(); it != d.MemberEnd(); ++it) if (strc

这是rapidjson的hello世界。如何将键
“hello”
更改为
“再见”
,并从json获取字符串?我的意思是我想解析json,更改一些键,然后像
{“再见”:“world”}
那样获取json字符串

const char json[]=“{\'hello\':\'world\'”;
rapidjson::文档d;
d、 解析(json);
或在迭代过程中:

for (auto it = d.MemberBegin(); it != d.MemberEnd(); ++it)
  if (strcmp (it->name.GetString(), "hello") == 0) it->name.SetString ("goodbye", d.GetAllocator());

在我的例子中,有一个名为
keyDict
的键字典,它存储对象键应该替换的值

std::string line;
std::map<std::string, int>  keyDict;

.....................
.........................

rapidjson::Document         doc;
doc.Parse<0>(line.c_str());
rapidjson::Value::MemberIterator itr;


for (itr = doc.MemberonBegin(); itr != doc.MemberonEnd(); ++itr)
{
    std::string keyCode = std::to_string(keyDict[itr->name.GetString()]);
    itr->name.SetString(keyCode.c_str(), keyCode.size(), doc.GetAllocator());
}
std::字符串行;
std::map-keyDict;
.....................
.........................
rapidjson::文档文档;
doc.Parse(line.c_str());
rapidjson::Value::MemberIterator itr;
对于(itr=doc.MemberonBegin();itr!=doc.MemberonEnd();++itr)
{
std::string keyCode=std::to_string(keyDict[itr->name.GetString());
itr->name.SetString(keyCode.c_str()、keyCode.size()、doc.GetAllocator());
}

。我只需要重命名密钥。使用就地示例进行更新。您可以正确使用Rapidjson 0.2,因为您有一个public
FindMember
方法。我在哪里可以找到它的代码?@Narek,我正在使用这个repo:。我上次更新已经很久了,但从我在
FindMember
上看到的情况来看,似乎仍然是公开的。您使用的是什么版本?cocos2d-x最新版本应为0.11,其中
FindMember
不是公共方法。这是一个问题。我问了,你回答了我,但后来我想出了这个办法,想看看是否可以。谢谢你们的回答。@dasblinkenlight,正如你们所注意到的,我的回答也是一个完整的答案。我取消了我的帖子,因为我有一个案例,ArtemGr没有。我的意思是,当您设置字符串时,使用的不是文字,而是局部变量。
rapidjson::Value::Member* hello = d.FindMember ("hello");
if (hello) hello->name.SetString ("goodbye", d.GetAllocator());
for (auto it = d.MemberBegin(); it != d.MemberEnd(); ++it)
  if (strcmp (it->name.GetString(), "hello") == 0) it->name.SetString ("goodbye", d.GetAllocator());
std::string line;
std::map<std::string, int>  keyDict;

.....................
.........................

rapidjson::Document         doc;
doc.Parse<0>(line.c_str());
rapidjson::Value::MemberIterator itr;


for (itr = doc.MemberonBegin(); itr != doc.MemberonEnd(); ++itr)
{
    std::string keyCode = std::to_string(keyDict[itr->name.GetString()]);
    itr->name.SetString(keyCode.c_str(), keyCode.size(), doc.GetAllocator());
}