web-dev-qa-db-ja.com

Json :: Valueをstd :: stringに変換しますか?

JsonCpp を使用してJSONオブジェクトを作成しています。オブジェクトが構築されたら、std::stringとしてオブジェクトを取得する方法はありますか?

30
BRabbit27

Json :: Writer を使用して正確にこれを行うことができます。人間が読める出力が必要ないようにどこかに保存したいので、最善の策は Json :: FastWriter その後、 Json :: Value のパラメーター(つまり、ルート)でwriteメソッドを呼び出すことができます)そして、それは単純にstd::stringを返します:

Json::FastWriter fastWriter;
std::string output = fastWriter.write(root);
36
Jordan Doyle

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値を文字列として取得する方法?

11
martias

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

私のコンテキストでは、代わりに単純な。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()もうまく機能します。