Красотка с 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 ответ

Решение

Причина, по которой вы возвращаете исходную строку ввода, заключается в том, что вы присваиваете строку непосредственно 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), на случай, если вас это заинтересует. Я лично использовал json от nlohmann, который требует только один заголовочный файл. RapidJSON также кажется отличным вариантом. Множество тестов для 40+ библиотек C++ JSON можно найти на странице nativejson-benchmark.

Другие вопросы по тегам