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

spt*_*025 2 c++ string jsoncpp

我在 JSONcpp 中有一个根,具有这样的字符串值。

Json::Value root;
std::string val =  "{\"stringval\": \"mystring\"}";
Json::Reader reader;
bool parsingpassed = reader.parse(val, root, false);
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试使用这段代码检索该值时。

Json::StreamWriterBuilder builder;
builder.settings_["indentation"] = "";
std::string out = Json::writeString(builder, root["stringval"]);
Run Code Online (Sandbox Code Playgroud)

理想情况下,这里的字符串应该包含:

"mystring"
Run Code Online (Sandbox Code Playgroud)

而它给出的输出是这样的:

"\"mystring\"" \\you see this in debug mode if you check your string content 
Run Code Online (Sandbox Code Playgroud)

顺便说一下,如果你使用stdout它打印这个值,将会打印如下内容:

"mystring" \\ because \" is an escape sequence and prints " in stdout
Run Code Online (Sandbox Code Playgroud)

它应该像这样打印stdout

mystring \\Expected output
Run Code Online (Sandbox Code Playgroud)

知道如何在将 json 输出转换为 std::string 时避免这种输出吗?请避免建议使用 fastwriter,因为它还添加了换行符并且也弃用了 API。

约束:我不想通过字符串操作删除额外的 \" 来修改字符串,而是愿意知道如何直接使用 JSONcpp 来做到这一点。

这是我使用过的 StreamWriterBuilder 参考代码

还找到了这个解决方案,它提供了从当前字符串中删除额外引号的最佳解决方案,但我不希望它首先存在

use*_*645 8

我也遇到了这个问题,直到我意识到你必须使用Json::Value类访问器函数,例如root["stringval"]will be "mystring",但root["stringval"].asString()will be mystring