Как сериализовать документ RapidJSON в строку?
Во всех примерах сериализационный текст перенаправляется на стандартный вывод через FileStream
, но мне нужно перенаправить его в строковую переменную.
Как это:
const char *GetJsonText()
{
rapidjson::StringBuffer buffer;
buffer.Clear();
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
doc.Accept(writer);
return strdup( buffer.GetString() );
}
Затем вы можете позвонить free () по возвращении или сделать:
return string( buffer.GetString() );
вместо.
в первая страница проекта, код уже показывает, как сериализовать документ в строку (stringify document):
// 3. Stringify the DOM
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
d.Accept(writer);
// Output {"project":"rapidjson","stars":11}
std::cout << buffer.GetString() << std::endl;
buffer.GetString()
здесь возвращает строку const char*
тип. Он также имеет buffer.GetSize()
для возврата размера выходной строки. Итак, если вы хотите преобразовать его в std::string
, лучший способ это:
std::string s(buffer.GetString(), buffer.GetSize());
tutorial.cpp также показать то же самое, в дополнение к другому распространенному использованию RapidJSON.
Пример кода:
Document document;
const char *json = " { \"x\" : \"0.01\", \"y\" :\"0.02\" , \"z\" : \"0.03\"} ";
document.Parse<0>(json);
//convert document to string
StringBuffer strbuf;
strbuf.Clear();
Writer<StringBuffer> writer(strbuf);
document.Accept(writer);
std::string ownShipRadarString = strbuf.GetString();
std::cout << "**********************************************" << ownShipRadarString << std::endl;