web-dev-qa-db-fra.com

Conversion d'un Json :: Value en std :: string?

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?

23
BRabbit27

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);
31
Jordan Doyle

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?

8
martias

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
0
Searene