Моя программа на 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;
но получил только дополнительные обратные слеши в исходной строке.
Подскажите пожалуйста, как это сделать?
Причина, по которой вы возвращаете исходную строку ввода, заключается в том, что вы присваиваете строку непосредственно 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-тест стр.
Других решений пока нет …