web-dev-qa-db-fra.com

Comment sérialiser un document RapidJSON en une chaîne?

Comment sérialiser un document RapidJSON en une chaîne?
Dans tous les exemples, le texte de sérialisation est redirigé vers la sortie standard via la variable FileStream, mais je dois le rediriger vers une variable chaîne.

6
Lochana Thenuwara

Comme ça:

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

  buffer.Clear();

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

  return strdup( buffer.GetString() );
}

Alors bien sûr vous devez appeler free () au retour, ou faire:

return string( buffer.GetString() );

au lieu.

6
A.Franzen

Dans la première page du projet , le code montre déjà comment sérialiser un document dans une chaîne (stringifier un 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() renvoie ici une chaîne de type const char*. Il a également une buffer.GetSize() pour renvoyer la taille de la chaîne de sortie. Donc, si vous voulez le convertir en std::string, le meilleur moyen est:

std::string s(buffer.GetString(), buffer.GetSize());

Le tutorial.cpp affiche également la même chose, en plus des autres utilisations courantes de RapidJSON.

9
Milo Yip

Exemple de code:

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