JSON de impressão bonita com Jackson em Java e Spring Boot

Jackson é uma das bibliotecas mais comuns para trabalhar com serialização e desserialização em Java e Spring Boot, usada principalmente para análise e conversão entre POJOs e JSON.

No entanto, se você trabalhou com Jackson, notará uma clara falta de impressão bonita por padrão:

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

Neste breve tutorial, você aprenderá como imprimir JSON com Jackson em Java padrão e com Spring Boot.

Estaremos trabalhando com uma string JSON e um POJO convertido em uma string JSON, pois eles se comportam de maneira diferente:

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;
    }
    

Vamos instanciar um Book instância e uma string para a entrada:

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);

JSON de impressão bonita com Jackson Once

Se você quiser simplesmente imprimir uma vez, em uma única chamada, em vez de definir o sinalizador de impressão global - você pode simplesmente usar o writerWithDefaultPrettyPrinter() call antes de escrever um valor como uma string:

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);

A string de entrada foi lida de (JSON-to-Object), e o valor desse objeto foi escrito de volta em uma string, usando pretty-printing (Object-to-JSON):

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

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

Alternativamente, ao usar readTree(), o resultado JsonNode tem um toPrettyString() função que serve como uma ótima maneira simples de converter strings em JSON bem impresso:

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

Esta é uma maneira rápida e simples de formatar uma string JSON de entrada! Ao trabalhar com POJOs, em vez de ler de uma determinada entrada, realizaremos apenas a conversão de objeto para JSON e habilitaremos a impressão bonita:

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
}

Configuração global de impressão bonita

Alternativamente, você pode habilitar a impressão global bonita, se esse for o comportamento global preferível de Jackson para seu projeto. Isso é tão fácil quanto usar o enable() método do ObjectMapper() instância quando você está instanciando:

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

Assim que você escrever um objeto como uma string JSON – a impressão bonita será habilitada por padrão:

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

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

Isto resulta em:

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

Com POJOs:

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

Confira nosso guia prático e prático para aprender Git, com práticas recomendadas, padrões aceitos pelo setor e folha de dicas incluída. Pare de pesquisar comandos Git no Google e realmente aprender -lo!

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

Essa abordagem é significativamente menos detalhada se a impressão bonita for um formato de exibição comum.

Jackson de impressão bonita com Spring Boot

Se você estiver usando o Spring Boot, sem um manual ObjectMapper instância sendo criada e contar com o serializador subjacente, você pode definir o indent_output bandeira para true no application.properties arquivo:

spring.jackson.serialization.indent_output=true

Ou, em application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Isso define o SerializationFeature.INDENT_OUTPUT bandeira na primavera ObjectMapper instância.

Conclusão

Neste breve tutorial, demos uma olhada em como você pode imprimir JSON de uma String ou POJO usando Jackson. Exploramos as alterações de impressão única (quando você deseja imprimir apenas uma vez) e definindo o sinalizador global de Jackson para ObjectMapper. Por fim, analisamos a alteração das propriedades do Spring Boot para habilitar a impressão bonita com Jackson.

Carimbo de hora:

Mais de Abuso de pilha