J'utilise JsonCpp pour construire un objet JSON. Une fois que l'objet est construit, y a-t-il un moyen de l'obtenir en tant que std::string
?
Vous pouvez utiliser un Json :: Writer pour faire exactement cela, puisque je suppose que vous voulez le sauvegarder quelque part afin de ne pas vouloir une sortie lisible par un humain, votre meilleur pari serait d'utiliser un Json :: FastWriter et ensuite vous pouvez appeler la méthode write
avec le paramètre de votre Json :: Value (c.-à-d. votre racine) puis cela retourne simplement un std::string
comme suit:
Json::FastWriter fastWriter;
std::string output = fastWriter.write(root);
Json::Writer
est obsolète et Json::StreamWriterBuilder
devrait plutôt être utilisé, comme indiqué dans la documentation de Json::Writer
.
Json::writeString
écrit dans un stringstream puis renvoie une chaîne:
Json::Value json = ...;
Json::StreamWriterBuilder builder;
builder["indentation"] = ""; // If you want whitespace-less output
const std::string output = Json::writeString(builder, json);
Félicitations à la réponse de cdunn2001 ici: Comment obtenir les valeurs JsonCPP sous forme de chaînes?
Si votre Json::value
est de type chaîne, par exemple "bar" dans le json suivant
{
"foo": "bar"
}
Vous pouvez utiliser Json::Value.asString
pour obtenir la valeur de bar
sans les guillemets supplémentaires (qui seront ajoutés si vous utilisez StringWriterBuilder
). Voici un exemple:
Json::Value rootJsonValue;
rootJsonValue["foo"] = "bar";
std::string s = rootJsonValue["foo"].asString();
std::cout << s << std::endl; // bar