将 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;
}