2012-01-13 3 views
3

Я разбираю данные json с помощью json cpp http://jsoncpp.sourceforge.net. Мне не нужно понимать данные, мне просто нужно распечатать некоторые свойства и их значения. Это как-то трудно сделать. Сначала мне нужно знать, какой тип это значение, а затем получить значение, а затем снова преобразовать его в строку! Существует стильный писатель, но я не хочу его использовать, поскольку он добавляет некоторые CRLF в конце.Как получить значения JsonCPP как строки?

я что-то вроде этого

CJsonHelper::getUInt(Json::Value &root, std::string key){ 
    return root.get(key, 0-1).isInt() ? root.get(key, 0-1).asUInt() : 0-1; 
} 

Могу ли я просто написать одну функцию, чтобы получить все свойства с только той функции, которая на самом деле не заботится о типах и т.д.?

+0

Почему вы используете '0-1' вместо того, чтобы просто' -1'? –

+0

Я могу просто написать -1. – Lalith

ответ

1

Вы можете создать свой собственный писатель, который сделает все, что захочет. Посмотрите код для StyledWriter. CRLF вам не нравится, но не StyledWriter::Write. Вы можете создать свой собственный класс писателя, который не имеет этих CRLF.

Если вы не возражаете, чтобы изменить библиотеку, измените запись так, чтобы функции, такие как writeValue, были защищены, а не закрыты. Затем вы можете получить свой собственный класс от StyledWriter с другой функцией Write и по-прежнему использовать различные функции write* для выполнения деталей преобразования.

3

Проект переехал в GitHub.

Чтобы избежать всех перевода строки, используйте StreamWriterBuilder:

Json::Value whatever = ...; 
Json::StreamWriterBuilder builder; 
builder.settings_["indentation"] = ""; 
std::string out = Json::writeString(builder, whatever);