Гарний друк JSON за допомогою Джексона в Java та Spring Boot

Jackson є однією з найпоширеніших бібліотек для роботи з серіалізацією та десеріалізацією в Java та Spring Boot, яка в основному використовується для аналізу та перетворення між POJO та JSON.

Хоча, якщо ви працювали з Джексоном, ви помітите явну відсутність красивого друку за замовчуванням:

{Task 1=In_Progress, Task 2=Done, Task 3=Planned}

У цьому короткому посібнику ви дізнаєтеся, як красиво друкувати JSON за допомогою Jackson у стандартній Java та за допомогою Spring Boot.

Ми працюватимемо з рядком JSON і POJO, перетвореним на рядок JSON, оскільки вони поводяться по-різному:

public class Book {
    private String title;
    private String author;
    private int releaseYear;

    public Book(String title, String author, int releaseYear) {
        this.title = title;
        this.author = author;
        this.releaseYear = releaseYear;
    }
    

Давайте створимо екземпляр a Book екземпляр і рядок для введення:

String inputString = "{n" +
        ""Task 1" : "In_Progress",n" +
        ""Task 2" : "Done",n" +
        ""Task 3" : "Planned"n" +
        "}";

Book book = new Book("Our Mathematical Universe", "Max Tegmark", 2014);

Pretty-Print JSON з Jackson Once

Якщо ви бажаєте просто надрукувати один раз, за ​​один виклик, а не встановлювати глобальний прапор друку, ви можете просто скористатися writerWithDefaultPrettyPrinter() виклик перед записом значення у вигляді рядка:

ObjectMapper mapper = new ObjectMapper();

Object jsonString = mapper.readValue(inputString, Object.class);
String indentedString = mapper.writerWithDefaultPrettyPrinter()
                              .writeValueAsString(jsonString);
        
        
System.out.println(jsonString);
System.out.println(indentedString);

Вхідний рядок було прочитано з (JSON-to-Object), а значення цього об’єкта було записане назад у рядок за допомогою красивого друку (Object-to-JSON):

{Task 1=In_Progress, Task 2=Done, Task 3=Planned}

{
  "Task 1" : "In_Progress",
  "Task 2" : "Done",
  "Task 3" : "Planned"
}

Як варіант, при вживанні readTree(), що виходить JsonNode має toPrettyString() функція, яка служить чудовим простим способом конвертації рядків у гарно друкований JSON:

ObjectMapper mapper = new ObjectMapper();
Object jsonString = mapper.readTree(inputString).toPrettyString();
System.out.println(jsonString);

Це швидкий і простий спосіб відформатувати вхідний рядок JSON! Працюючи з POJO, замість читання з заданого вхідного даних ми виконуватимемо лише перетворення об’єкта в JSON і вмикатимемо красивий друк:

ObjectMapper mapper = new ObjectMapper();

String jsonBook = mapper.writeValueAsString(book);
String indentedBook = mapper.writerWithDefaultPrettyPrinter()
                            .writeValueAsString(book);


System.out.println(jsonBook);
System.out.println(indentedBook);
{"title":"Our Mathematical Universe","author":"Max Tegmark","releaseYear":2014}
{
  "title" : "Our Mathematical Universe",
  "author" : "Max Tegmark",
  "releaseYear" : 2014
}

Глобальне налаштування красивого друку

Крім того, ви можете ввімкнути глобальний красивий друк, якщо це бажана глобальна поведінка Jackson для вашого проекту. Це так само просто, як використовувати enable() метод ObjectMapper() наприклад, коли ви створюєте його екземпляр:

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);

Щойно ви напишете об’єкт як рядок JSON, красивий друк буде ввімкнено за замовчуванням:

Object jsonString = mapper.readValue(inputString, Object.class);
String indentedString = mapper.writeValueAsString(jsonString);

System.out.println(jsonString);
System.out.println(indentedString);

Це призводить до:

{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
{
  "Task 1" : "In_Progress",
  "Task 2" : "Done",
  "Task 3" : "Planned"
}

З POJO:

String jsonBook = mapper.writeValueAsString(book);
System.out.println(jsonBook);

Ознайомтеся з нашим практичним практичним посібником із вивчення Git з передовими методами, прийнятими в галузі стандартами та включеною шпаргалкою. Припиніть гуглити команди Git і фактично вчитися це!

{
  "title" : "Our Mathematical Universe",
  "author" : "Max Tegmark",
  "releaseYear" : 2014
}

Цей підхід значно менш багатослівний, якщо красивий друк є поширеним форматом відображення.

Красивий Джексон із весняним черевиком

Якщо ви використовуєте Spring Boot, без посібника ObjectMapper створюється екземпляр і покладається на базовий серіалізатор, ви можете встановити indent_output прапор до true в application.properties Файл:

spring.jackson.serialization.indent_output=true

Або, в application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Це встановлює SerializationFeature.INDENT_OUTPUT прапор навесні ObjectMapper екземпляр

Висновок

У цьому короткому підручнику ми розглянули, як можна красиво надрукувати JSON із String або POJO за допомогою Jackson. Ми дослідили зміни, пов’язані з одноразовим друком (коли ви хочете надрукувати гарний друк лише один раз) і встановлення глобального прапора Джексона для ObjectMapper. Нарешті, ми розглянули зміну властивостей Spring Boot, щоб увімкнути якісний друк за допомогою Jackson.

Часова мітка:

Більше від Stackabuse