Pretty-Printing JSON con Jackson en Java y Spring Boot

Jackson es una de las bibliotecas más comunes para trabajar con serialización y deserialización en Java y Spring Boot, y se usa principalmente para analizar y convertir entre POJO y JSON.

Sin embargo, si ha trabajado con Jackson, notará una clara falta de impresión bonita por defecto:

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

En este breve tutorial, aprenderá cómo imprimir JSON con Jackson en Java estándar y con Spring Boot.

Trabajaremos con una cadena JSON y un POJO convertido en una cadena JSON, ya que estos se comportan de manera 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 a instanciar un Book instancia, y una cadena para la 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);

Pretty-Print JSON con Jackson Once

Si desea simplemente realizar una impresión bonita una vez, en una sola llamada, en lugar de configurar el indicador de impresión global, simplemente puede usar el writerWithDefaultPrettyPrinter() llamar antes de escribir un valor como una cadena:

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

La cadena de entrada se leyó desde (JSON a objeto), y el valor de este objeto se volvió a escribir en una cadena, usando una impresión bonita (Objeto a JSON):

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

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

Alternativamente, cuando se usa readTree(), la resultante JsonNode tiene un toPrettyString() función que sirve como una excelente manera simple de convertir cadenas a JSON bastante impreso:

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

¡Esta es una forma rápida y sencilla de formatear una cadena JSON de entrada! Cuando trabaje con POJO, en lugar de leer de una entrada determinada, solo realizaremos la conversión de objeto a JSON y habilitaremos la impresión 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
}

Configuración global de impresión bonita

Alternativamente, puede habilitar la impresión bonita global, si ese es el comportamiento global preferible de Jackson para su proyecto. Esto es tan fácil como usar el enable() método de la ObjectMapper() instancia cuando lo está instanciando:

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

Tan pronto como escriba un objeto como una cadena JSON, la impresión bonita se habilitará de forma predeterminada:

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

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

Esto resulta en:

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

Con POJO:

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

Consulte nuestra guía práctica y práctica para aprender Git, con las mejores prácticas, los estándares aceptados por la industria y la hoja de trucos incluida. Deja de buscar en Google los comandos de Git y, de hecho, aprenden ella!

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

Este enfoque es significativamente menos detallado si la impresión bonita es un formato de visualización común.

Pretty-Printing Jackson con Spring Boot

Si está utilizando Spring Boot, sin un manual ObjectMapper instancia que se está creando y confiar en el serializador subyacente, puede configurar el indent_output bandera a true existentes application.properties archivo:

spring.jackson.serialization.indent_output=true

O, en application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Esto establece el SerializationFeature.INDENT_OUTPUT bandera en primavera ObjectMapper ejemplo.

Conclusión

En este breve tutorial, hemos analizado cómo puede imprimir JSON de una cadena o POJO usando Jackson. Hemos explorado los cambios de una sola impresión (cuando solo desea una impresión bonita una vez) y la configuración de la bandera global de Jackson para ObjectMapper. Finalmente, echamos un vistazo a cómo cambiar las propiedades de Spring Boot para permitir una impresión bonita con Jackson.

Sello de tiempo:

Mas de Abuso de pila