Как получить значения JsonCPP в виде строк? - PullRequest
4 голосов
/ 13 января 2012

Я анализирую данные JSON, используя JsonCpp . Мне не нужно понимать данные, мне просто нужно распечатать некоторые свойства и их значения. Это как-то сложно сделать. Сначала мне нужно узнать, какого типа это значение, а затем получить значение и затем снова преобразовать его в строку! Есть писатель в стиле, но я не хочу его использовать, так как он добавляет немного CRLF в конце.

Я делаю что-то вроде этого

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

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

Ответы [ 2 ]

8 голосов
/ 17 февраля 2015

Проект перемещен в GitHub .

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

Json::Value whatever = ...;
Json::StreamWriterBuilder builder;
builder.settings_["indentation"] = "";
std::string out = Json::writeString(builder, whatever);
1 голос
/ 13 января 2012

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

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

...