我在JSONcpp中有一个像这样的字符串值的根。
Json::Value root;
std::string val = "{\"stringval\": \"mystring\"}";
Json::Reader reader;
bool parsingpassed = reader.parse(val, root, false);
现在,当我尝试使用这段代码检索此值时。
Json::StreamWriterBuilder builder;
builder.settings_["indentation"] = "";
std::string out = Json::writeString(builder, root["stringval"]);
这里的字符串理想情况下应该给出包含:
"mystring"
而它提供的输出如下:
"\"mystring\"" \\you see this in debug mode if you check your string content
顺便说一句,如果你使用stdout
打印这个值,它将被打印出像这样的东西::
"mystring" \\ because \" is an escape sequence and prints " in stdout
它应该在stdout
:
mystring \\Expected output
知道在将json输出转换为std :: string时如何避免这种输出? 请避免建议使用fastwriter,因为它还添加了换行符,并且它也弃用了API。
约束:我不想通过删除额外的\"来修改字符串。使用字符串操作而不是我愿意知道如何直接使用JSONcpp。
This is StreamWriterBuilder Reference code which I have used
答案 0 :(得分:3)
我也遇到过这个问题,直到我意识到你必须使用Json::Value
类访问器函数,例如root["stringval"]
将为"mystring"
,但root["stringval"].asString()
将为mystring
。
答案 1 :(得分:0)
好的,所以这个问题在彻底解释之后也没有得到答案,我不得不经历一段时间的JSONCPP apis和文档。
我现在没有找到任何api来处理额外双引号添加的情况。 现在从他们的wikibook我可以发现一些转义序列可能会出现在String中。它是按设计的,他们没有提到确切的情况。
\" - quote
\\ - backslash
\/ - slash
\n - newline
\t - tabulation
\r - carriage return
\b - backspace
\f - form feed
\uxxxx , where x is a hexadecimal digit - any 2-byte symbol
Link Explaining what all extra Escape Sequence might come in String
任何人如果找到相同问题的更好解释,请随时发布您的答案。然后我想只有字符串操作才能删除那些额外的转义序列..