1

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

但在原始字符串中只得到了额外的反斜杠。

你能告诉我怎么做吗?

4

1 回答 1

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 的 json,它只需要一个头文件。RapidJSON似乎也是一个很好的选择。可以在nativejson-benchmark页面上找到 40 多个 C++ JSON 库的大量基准测试。

于 2017-11-07T17:47:59.943 回答