Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ jsoncpp格式问题_C++_Json_Jsoncpp - Fatal编程技术网

C++ jsoncpp格式问题

C++ jsoncpp格式问题,c++,json,jsoncpp,C++,Json,Jsoncpp,我使用的是jsoncpp,在使用其中一个编写器编写json消息时,json消息的格式有问题 例如: root["name"] = "monkey"; std::cout << writer.write(root) << "\n"; 虽然我真的想要: {"name":"monkey"} 我查看了文档,其中提到了setIndentLength(),但它们没有出现在源文件中,因此可能是不推荐使用的或其他什么 无论如何,有人知道怎么做吗?如果您使用Jsoncpp 1.1版,您

我使用的是jsoncpp,在使用其中一个编写器编写json消息时,json消息的格式有问题

例如:

root["name"] = "monkey";
std::cout << writer.write(root) << "\n";
虽然我真的想要:

{"name":"monkey"}
我查看了文档,其中提到了
setIndentLength()
,但它们没有出现在源文件中,因此可能是不推荐使用的或其他什么


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

如果您使用Jsoncpp 1.1版,您可以使用
Json::FastWriter
而不是
Json::StyledWriter
Json::Writer

JSON文档是在一行中编写的。它不是为了 “人工”消耗,但可能有助于支持RPC等功能 那里的带宽是有限的


FastWriter
StyledWriter
StyledStreamWriter
Writer
都是。使用,这将创建一个具有稍微不同API的
StreamWriter
。这样使用它:

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

作为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);
Json::Value Json=。。。
streamwriterbuilderbuilder;
生成器[“commentStyle”]=“无”;
生成器[“缩进”]=“”//JSON文档是在一行中编写的
std::unique_ptr writer(builder.newStreamWriter());
writer->write(json和std::cout);

你应该告诉我们什么是
writer
。线索在它的类型中。为什么
settings
后面有下划线(@LightnessRacesinOrbit它是类成员名称(请参阅)@ MMPROMONET:是的,我理解。为什么它有一个尾部下划线?这对于一个公共接口来说是很奇怪的,IMO遵循谷歌C++风格的数据成员指南。它是公开的,因为我们保证“代码> JSO::值的API将保持向后兼容和二进制兼容。是的,这很奇怪,但它强调了事实。它是数据成员,不是函数。您认为这是一个巨大的错误吗?我们可以添加
Value&settings()
Value-const&settings()const
并反对直接访问。但对我来说,直接访问要简单得多。隐藏访问的通常原因在这里并不适用,因为我们对数据成员更改的限制非常严格。@cdunn2001:直接访问原则上没有问题,尽管它似乎不适合您的API在项目的其余部分因为它暴露了这个“内部”命名方案,在使用时看起来非常奇怪。使用它感觉不对劲。至于谷歌的C++风格指南,我真的不会把太多的东西放在这胡说八道(尽管它至少比以前更好)。;当然,对数据成员采用伪匈牙利符号似乎没有比匈牙利符号本身有多大的改进,我们都知道这是多么令人讨厌!请解释一下这个答案。只使用代码的答案大多没有多大价值。谢谢!继续努力!@progressive\u超载提前谢谢。添加了一些解释。我有jsoncpp 1.8.3我如何回到verson 1.1?@deepmax
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);