Красотка с 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 Нлохмана который требует только один заголовочный файл. RapidJSON кажется, отличный вариант, а также. Тонны тестов для 40+ библиотек C ++ JSON можно найти на nativejson-тест стр.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]