Как сериализовать документ RapidJSON в строку?

Как сериализовать документ RapidJSON в строку?
Во всех примерах сериализационный текст перенаправляется на стандартный вывод через FileStream, но мне нужно перенаправить его в строковую переменную.

6

Решение

Как это:

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

вместо.

5

Другие решения

в первая страница проекта, код уже показывает, как сериализовать документ в строку (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.

9

Пример кода:

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;
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector