jsoncpp格式化问题

时间:2011-09-26 15:13:50

标签: c++ json jsoncpp

我正在使用jsoncpp,我在使用其中一个Writers编写json消息时遇到了问题。

例如:

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

给我一​​些格式化的东西

{
    "name" : "monkey"
}

虽然我真的想要:

{"name":"monkey"}

我查看了文档,并提到setIndentLength(),但它们没有出现在源文件中,因此可能会弃用它们。

无论如何,任何人都知道如何做到这一点?

3 个答案:

答案 0 :(得分:5)

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

  

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

答案 1 :(得分:4)

FastWriterStyledWriterStyledStreamWriterWriterdeprecated。使用StreamWriterBuilder创建StreamWriter,其API略有不同。以这种方式使用它:

Json::StreamWriterBuilder builder;
builder.settings_["indentation"] = "";
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
writer->write(root, &std::cout);

答案 2 :(得分:4)

作为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);