将 Json::Value 转换为 std::string?
Converting a Json::Value to std::string?
我正在使用 JsonCpp 构建一个 JSON 对象。构建对象后,有没有办法将对象作为 std::string
?
您可以使用 Json::Writer to do exactly this, since I assume you want to save it somewhere so you don't want human readable output, your best bet would be to use a Json::FastWriter and then you can call the write
method with the parameter of your Json::Value(即您的根目录)然后简单地 returns 一个 std::string
,如下所示:
Json::FastWriter fastWriter;
std::string output = fastWriter.write(root);
Json::Writer
is deprecated. Use Json::StreamWriter
or Json::StreamWriterBuilder
代替。
Json::writeString
写入字符串流,然后 returns 写入字符串:
Json::Value json = ...;
Json::StreamWriterBuilder builder;
builder["indentation"] = ""; // If you want whitespace-less output
const std::string output = Json::writeString(builder, json);
这里感谢 cdunn2001 的回答:How to get JsonCPP values as strings?
如果你的Json::value
是字符串类型,例如"bar"在下面json
{
"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
在我的上下文中,我在 json 值对象的末尾使用了一个简单的 .asString()。正如@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() 也能很好地工作。
您也可以使用 toStyledString() 方法。
jsonValue.toStyledString();
方法“toStyledString()”将任何值转换为格式化字符串。
另见 link:doc for toStyledString
这个小帮手也许可以。
//////////////////////////////////////////////////
// json.asString()
//
std::string JsonAsString(const Json::Value &json)
{
std::string result;
Json::StreamWriterBuilder wbuilder;
wbuilder["indentation"] = ""; // Optional
result = Json::writeString(wbuilder, json);
return result;
}
我正在使用 JsonCpp 构建一个 JSON 对象。构建对象后,有没有办法将对象作为 std::string
?
您可以使用 Json::Writer to do exactly this, since I assume you want to save it somewhere so you don't want human readable output, your best bet would be to use a Json::FastWriter and then you can call the write
method with the parameter of your Json::Value(即您的根目录)然后简单地 returns 一个 std::string
,如下所示:
Json::FastWriter fastWriter;
std::string output = fastWriter.write(root);
Json::Writer
is deprecated. Use Json::StreamWriter
or Json::StreamWriterBuilder
代替。
Json::writeString
写入字符串流,然后 returns 写入字符串:
Json::Value json = ...;
Json::StreamWriterBuilder builder;
builder["indentation"] = ""; // If you want whitespace-less output
const std::string output = Json::writeString(builder, json);
这里感谢 cdunn2001 的回答:How to get JsonCPP values as strings?
如果你的Json::value
是字符串类型,例如"bar"在下面json
{
"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
在我的上下文中,我在 json 值对象的末尾使用了一个简单的 .asString()。正如@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() 也能很好地工作。
您也可以使用 toStyledString() 方法。
jsonValue.toStyledString();
方法“toStyledString()”将任何值转换为格式化字符串。 另见 link:doc for toStyledString
这个小帮手也许可以。
//////////////////////////////////////////////////
// json.asString()
//
std::string JsonAsString(const Json::Value &json)
{
std::string result;
Json::StreamWriterBuilder wbuilder;
wbuilder["indentation"] = ""; // Optional
result = Json::writeString(wbuilder, json);
return result;
}