10

我正在使用 jsoncpp,并且在使用其中一个 Writer 编写 json 消息时如何格式化它们时遇到问题。

例如:

root["name"] = "monkey";
std::cout << writer.write(root) << "\n";

给我一些像这样格式化的东西

{
    "name" : "monkey"
}

虽然我实际上想要:

{"name":"monkey"}

我查看了文档,并且提到了setIndentLength()但它们没有出现在源文件中,所以它们可能已被弃用或其他什么。

无论如何,有人知道该怎么做吗?

4

3 回答 3

6

作为 cdunn2001 答案的扩展,无需重新编写默认设置(.settings_)。您可以覆盖 StreamWriterBuilder 构建器的“缩进”值:

Json::Value json = ...
Json::StreamWriterBuilder builder;
builder["commentStyle"] = "None";
builder["indentation"] = ""; //The JSON document is written in a single line
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
writer->write(json, &std::cout);
于 2016-06-08T12:27:12.767 回答
5

如果您使用 Jsoncpp 1.1 版,则可以使用Json::FastWriter代替Json::StyledWriteror Json::Writer

JSON 文档写在一行中。它不适合“人类”消费,但可能有助于支持带宽受限的 RPC 等功能。

于 2011-09-26T15:54:21.033 回答
4

FastWriter, StyledWriter,StyledStreamWriterWriter弃用。使用,它使用稍微不同的 APIStreamWriterBuilder创建一个。StreamWriter以这种方式使用它:

Json::StreamWriterBuilder builder;
builder.settings_["indentation"] = "";
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
writer->write(root, &std::cout);
于 2015-02-15T00:46:28.430 回答