Ich verwende JsonCpp , um ein JSON-Objekt zu erstellen. Gibt es eine Möglichkeit, das Objekt als std::string
zu erhalten, nachdem das Objekt erstellt wurde?
Sie können einen Json :: Writer verwenden, um genau dies zu tun, da Sie davon ausgehen, dass Sie sie irgendwo speichern möchten, damit Sie keine für den Menschen lesbaren Ausgabe benötigen. Am besten verwenden Sie einen Json :: FastWriter und dann können Sie die write
-Methode mit dem Parameter Ihres Json :: Value (dh Ihres Root-Verzeichnisses) aufrufen, und dann wird einfach ein std::string
zurückgegeben:
Json::FastWriter fastWriter;
std::string output = fastWriter.write(root);
Json::Writer
ist veraltet und stattdessen sollte Json::StreamWriterBuilder
verwendet werden, wie in der Dokumentation von Json::Writer
angegeben.
Json::writeString
schreibt in einen Stringstream und gibt dann einen String zurück:
Json::Value json = ...;
Json::StreamWriterBuilder builder;
builder["indentation"] = ""; // If you want whitespace-less output
const std::string output = Json::writeString(builder, json);
Ein dickes Lob an die Antwort von cdunn2001 hier: Wie erhalte ich JsonCPP-Werte als Zeichenketten?
Wenn Ihr Json::value
vom String-Typ ist, z. "bar" im folgenden json
{
"foo": "bar"
}
Sie können Json::Value.asString
verwenden, um den Wert von bar
ohne zusätzliche Anführungszeichen zu erhalten (die hinzugefügt werden, wenn Sie StringWriterBuilder
verwenden). Hier ist ein Beispiel:
Json::Value rootJsonValue;
rootJsonValue["foo"] = "bar";
std::string s = rootJsonValue["foo"].asString();
std::cout << s << std::endl; // bar
In meinem Kontext habe ich stattdessen ein einfaches . AsString () am Ende meines json-Wertobjekts verwendet. Wie @Searene sagte, werden die zusätzlichen Anführungszeichen entfernt, die Sie nicht benötigen, wenn Sie sie später verarbeiten möchten.
Json::Value credentials;
Json::Reader reader;
// Catch the error if wanted for the reader if wanted.
reader.parse(request.body(), credentials);
std::string usager, password;
usager = credentials["usager"].asString();
password = credentials["password"].asString();
Wenn der Wert ein int anstelle eines Strings ist, funktioniert . AsInt () ebenfalls hervorragend.