将key更改为其他值

change key to another value

本文关键字:其他 key      更新时间:2023-10-16

这是rapidjson的hello世界。我怎么能改变关键"hello""goodbye",并从json获得字符串?我的意思是我想解析json,改变一些键,得到json字符串像{"goodbye" : "world"}

const char json[] = "{ "hello" : "world" }";
rapidjson::Document d;
d.Parse<0>(json);
  const char *json = R"({"hello": "world"})";
  rapidjson::Document d;
  d.Parse<0> (json);
  rapidjson::Value::Member* hello = d.FindMember ("hello"); if (hello) {
    d.AddMember ("goodbye", hello->value, d.GetAllocator());
    d.RemoveMember ("hello");
  }
  typedef rapidjson::GenericStringBuffer<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<>> StringBuffer;
  StringBuffer buf (&d.GetAllocator());
  rapidjson::Writer<StringBuffer> writer (buf, &d.GetAllocator());
  d.Accept (writer);
  json = buf.GetString();

注:您可能应该在之后复制json,因为它的内存将与d一起释放。

P.P.S.您也可以就地替换字段名,而不删除它:

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());

在我的例子中,有一个名为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());
}
相关文章: