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