【问题标题】:jsoncpp formatting problemsjsoncpp格式问题
【发布时间】:2011-11-25 07:33:44
【问题描述】:

我正在使用 jsoncpp,但在使用其中一个 Writer 编写 json 消息时,它们的格式存在问题。

例如:

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

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

{
    "name" : "monkey"
}

虽然我真的想要:

{"name":"monkey"}

我查看了文档,其中提到了setIndentLength(),但它们没有出现在源文件中,因此它们可能已被弃用或其他原因。

有人知道怎么做吗?

【问题讨论】:

  • 你应该向我们展示writer 是什么。线索在于它的类型。

标签: c++ json jsoncpp


【解决方案1】:

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

【讨论】:

  • 请稍微解释一下这个答案。仅代码的答案大多没有多大价值。感谢你!继续努力!
  • @progressive_overload 提前谢谢你。添加了一些解释。
【解决方案2】:

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

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

【讨论】:

  • 我有 jsoncpp 1.8.3 我怎么能恢复到 1.1 版本? @deepmax
【解决方案3】:

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

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

【讨论】:

  • 为什么settings 后面有一个下划线? :(
  • @LightnessRacesinOrbit 它是类成员名称(见open-source-parsers.github.io/jsoncpp-docs/doxygen/…
  • @mpromonet:是的,我明白这一点。为什么它有一个尾随下划线?对于一个公共接口来说,这很奇怪,IMO。
  • 它遵循针对数据成员的 Google C++ 样式指南。它是公开的,因为我们保证 Json::Value 的 API 将保持向后兼容和二进制兼容。是的,这很奇怪,但它强调它是一个数据成员,而不是一个函数。你认为这是一个巨大的错误吗?我们可以添加Value&amp; settings()Value const&amp; settings() const 并弃用直接访问。但对我来说,直接访问要简单得多。隐藏访问的通常原因在这里并不适用,因为无论如何我们对数据成员的更改都有非常严格的限制。
  • @cdunn2001:原则上我没有直接访问的问题,尽管它似乎不适合您的 API 在项目的其余部分。而且由于它公开了这种“内部”命名方案,因此在使用时看起来非常奇怪。用起来感觉不对。至于 Google 的 C++ 风格指南,我真的不会在那些废话上放太多东西(尽管它至少比以前更好了);当然,对数据成员采用伪匈牙利表示法似乎并没有比匈牙利表示法本身有多大改进,而且我们都知道 that 是多么讨厌!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 2011-08-16
  • 2011-02-12
  • 2016-11-29
相关资源
最近更新 更多