JsonCpp を使用してJSONオブジェクトを作成しています。オブジェクトが構築されたら、std::string
としてオブジェクトを取得する方法はありますか?
Json :: Writer を使用して正確にこれを行うことができます。人間が読める出力が必要ないようにどこかに保存したいので、最善の策は Json :: FastWriter その後、 Json :: Value のパラメーター(つまり、ルート)でwrite
メソッドを呼び出すことができます)そして、それは単純にstd::string
を返します:
Json::FastWriter fastWriter;
std::string output = fastWriter.write(root);
Json::Writer
のドキュメント で述べられているように、Json::StreamWriterBuilder
は非推奨であり、代わりにJson::Writer
を使用する必要があります。
Json::writeString
文字列ストリームに書き込み、文字列を返します:
Json::Value json = ...;
Json::StreamWriterBuilder builder;
builder["indentation"] = ""; // If you want whitespace-less output
const std::string output = Json::writeString(builder, json);
ここでのcdunn2001の回答に対する称賛: JsonCPP値を文字列として取得する方法?
Json::value
が文字列タイプの場合、たとえば次のjsonの「bar」
{
"foo": "bar"
}
Json::Value.asString
を使用して、bar
の値を余分な引用符なしで取得できます(StringWriterBuilder
を使用すると追加されます)。以下に例を示します。
Json::Value rootJsonValue;
rootJsonValue["foo"] = "bar";
std::string s = rootJsonValue["foo"].asString();
std::cout << s << std::endl; // bar
私のコンテキストでは、代わりに単純な。asString()をJSON値オブジェクトの最後に使用しました。 @Seareneが言ったように、後で処理したい場合に不要な余分な引用符を取り除きます。
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();
値が文字列ではなくintの場合、。asInt()もうまく機能します。