如何将RapidJSON文档序列化为字符串?

Loc*_*ara 9 c++ string document rapidjson

如何将RapidJSON文档序列化为字符串?
在所有示例中,序列化文本通过重定向到标准输出FileStream,但我需要将其重定向到字符串变量.

Mil*_*Yip 12

项目第一页中,代码已经显示了如何将文档序列化为字符串(stringify文档):

// 3. Stringify the DOM
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
d.Accept(writer);

// Output {"project":"rapidjson","stars":11}
std::cout << buffer.GetString() << std::endl;
Run Code Online (Sandbox Code Playgroud)

buffer.GetString()这里返回一个const char*类型的字符串.它还有一个buffer.GetSize()用于返回输出字符串的大小.所以,如果你将它转换为a std::string,最好的方法是:

std::string s(buffer.GetString(), buffer.GetSize());
Run Code Online (Sandbox Code Playgroud)

tutorial.cpp也显示了同样的事情,除了RapidJSON的其他常见的用法.

  • `buffer`的析构函数会释放`buffer.GetString()`吗?如果是,那么有没有办法*移动*缓冲区的内容而不是*复制*它? (3认同)

A.F*_*zen 10

像这样:

const char *GetJsonText()
{
  rapidjson::StringBuffer buffer;

  buffer.Clear();

  rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
  doc.Accept(writer);

  return strdup( buffer.GetString() );
}
Run Code Online (Sandbox Code Playgroud)

然后你必须在返回时调用free(),或者执行:

return string( buffer.GetString() );
Run Code Online (Sandbox Code Playgroud)

代替.