将Json :: Value转换为std :: string?

问题描述 投票:27回答:4

我正在使用JsonCpp来构建一个JSON对象。一旦构建了对象,有没有办法让对象成为std::string

c++ stdstring jsoncpp
4个回答
36
投票

你可以使用Json::Writer做到这一点,因为我假设你想把它保存在某个地方,所以你不想要人类可读的输出,你最好的选择是使用Json::FastWriter然后你可以用参数调用write方法你的Json::Value(即你的根),然后就像这样简单地返回一个std::string

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

10
投票

Json::Writer所述,Json::StreamWriterBuilder已被弃用,而documentation of 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的回答:How to get JsonCPP values as strings?


2
投票

如果你的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

0
投票

在我的上下文中,我在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()也可以很好地工作。

© www.soinside.com 2019 - 2024. All rights reserved.