JSONCPP正在为字符串添加额外的双引号

时间:2017-01-31 08:53:53

标签: c++ string jsoncpp

我在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

Also found this solution, which gives optimal solution to remove extra quotes from your current string , but I don't want it to be there in first place

2 个答案:

答案 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

任何人如果找到相同问题的更好解释,请随时发布您的答案。然后我想只有字符串操作才能删除那些额外的转义序列..