我的C ++程序接收一个长(数千个符号)JSON字符串,我想使用JSON Spirit(用于调试)打印多行,右缩进等。例如:
{
"abc": "def",
"xyz":
[
"pqr": "ijk"
]
}
等等。我尝试了write
函数:
const json_spirit::Value val("...long JSON string here ...");
cout << json_spirit::write(val, json_spirit::pretty_print) << endl;
但原始字符串中只有额外的反斜杠。
你能告诉我该怎么做吗?
答案 0 :(得分:1)
您获取原始输入字符串的原因是您将字符串直接分配给json_spirit::Value
。你需要做的是让json_spirit
解析字符串。
下面的C ++ 11代码给出了预期的输出:
#include <json_spirit/json_spirit.h>
#include <ostream>
#include <string>
int main() {
std::string const inputStr =
R"raw({ "abc": "def", "xyz": [ "pqr": "ijk" ] })raw";
json_spirit::Value inputParsed;
json_spirit::read(inputStr, inputParsed);
std::cout
<< json_spirit::write(inputParsed, json_spirit::pretty_print) << "\n";
}
旁注:有一大堆更轻量级的C ++ JSON库(即不需要Boost),以防您感兴趣。我个人使用nlohmann's json,只需要一个头文件。 RapidJSON似乎也是一个很好的选择。可以在nativejson-benchmark页面上找到大量40多个C ++ JSON库的基准测试。