Пользовательский красивый принтер с использованием библиотеки Джексона

У меня есть данные в объекте карты, и я хочу распечатать их в формате json. Я пытался использовать DefaultPrettyPrinter

mapper.writerWithDefaultPrettyPrinter().writeValue(filePath, mapObject);

но формат не тот, что я ожидал. Я получаю вывод следующим образом:

{
  "arrVals" : ["value-1","value-2"]
}

Я хочу, чтобы вывод был таким:

{
  "arrVals" : [
    "value-1",
    "value-2"
  ]
}

person Manisha    schedule 07.08.2013    source источник
comment
Здесь есть аналогичный вопрос: stackoverflow.com/questions/6176881/ (НЕ дубликат, на мой взгляд), который может вам помочь   -  person morgano    schedule 07.08.2013
comment
Я видел это, но это не решает проблему. Мне нужно распечатать значения массива в следующей строке.   -  person Manisha    schedule 07.08.2013
comment
Аналогичный вопрос: stackoverflow.com/questions/17411586/   -  person Michał Ziober    schedule 07.08.2013


Ответы (1)


Вам нужен отступ перед значениями массива. Вы можете использовать метод indentArraysWith для установки объекта Lf2SpacesIdenter, который в основном добавит перевод строки, за которым следуют 2 пробела. Это может решить вашу проблему.

DefaultPrettyPrinter pp = new DefaultPrettyPrinter();
pp.indentArraysWith(new Lf2SpacesIndenter());
mapper.writer(pp).writeValue(filePath, mapObject);
person Mady    schedule 07.08.2013
comment
Lf2SpacesIndenter находится в DefaultPrettyPrinter.Lf2SpacesIndenter Поле конструктора и экземпляра устарело. Использование: pp.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE); - person djb; 17.02.2016