使用JSON Spirit进行漂亮打印

时间:2017-11-07 17:05:39

标签: c++ json json-spirit

我的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;

但原始字符串中只有额外的反斜杠。

你能告诉我该怎么做吗?

1 个答案:

答案 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库的基准测试。