проблемы форматирования jsoncpp - PullRequest
9 голосов
/ 26 сентября 2011

Я использую jsoncpp, и у меня возникла проблема с форматированием сообщений json, когда они пишутся с использованием одного из Writers.

Например:

root["name"] = "monkey";
std::cout << writer.write(root) << "\n";

Дает мне что-то отформатированное как это

{
    "name" : "monkey"
}

Пока я действительно хочу:

{"name":"monkey"}

Я имеюпосмотрел документацию и там есть упоминания setIndentLength(), но они не появляются в исходных файлах, так что, возможно, они устарели или что-то в этом роде.

В любом случае, кто-нибудь знает, как это сделать?

Ответы [ 3 ]

5 голосов
/ 08 июня 2016

Как расширение ответа cdunn2001, нет необходимости перезаписывать настройки по умолчанию (.settings_). Вы можете просто переопределить значение 'indentation' построителя StreamWriterBuilder:

Json::Value json = ...
Json::StreamWriterBuilder builder;
builder["commentStyle"] = "None";
builder["indentation"] = ""; //The JSON document is written in a single line
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
writer->write(json, &std::cout);
5 голосов
/ 26 сентября 2011

Если вы используете Jsoncpp версии 1.1, вы можете использовать Json::FastWriter вместо Json::StyledWriter или Json::Writer:

Документ JSON написан в одну строку. Не предназначен для «человеческое» потребление, но может быть полезно для поддержки таких функций, как RPC где пропускная способность ограничена.

4 голосов
/ 15 февраля 2015

FastWriter, StyledWriter, StyledStreamWriter и Writer устарели . Используйте StreamWriterBuilder, который создает StreamWriter с немного другим API. Используйте это так:

Json::StreamWriterBuilder builder;
builder.settings_["indentation"] = "";
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
writer->write(root, &std::cout);
...