JSON di stampa graziosa con Jackson in Java e Spring Boot

Jackson è una delle librerie più comuni per lavorare con la serializzazione e la deserializzazione in Java e Spring Boot, utilizzata principalmente per l'analisi e la conversione tra POJO e JSON.

Tuttavia, se hai lavorato con Jackson, noterai una netta mancanza di belle stampe per impostazione predefinita:

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

In questo breve tutorial imparerai come stampare in modo grazioso JSON con Jackson in Java standard e con Spring Boot.

Lavoreremo con una stringa JSON e un POJO convertito in una stringa JSON, poiché si comportano in modo diverso:

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

Istanziamo un Book istanza e una stringa per l'input:

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

Se desideri stampare semplicemente una volta, in una singola chiamata, invece di impostare il flag di stampa globale, puoi semplicemente utilizzare il writerWithDefaultPrettyPrinter() chiamare prima di scrivere un valore come stringa:

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 stringa di input è stata letta da (JSON-to-Object) e il valore di questo oggetto è stato riscritto in una stringa, utilizzando la stampa graziosa (Object-to-JSON):

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

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

In alternativa, durante l'utilizzo readTree(), il risultato JsonNode ha una toPrettyString() funzione che funge da ottimo modo semplice per convertire stringhe in JSON ben stampati:

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

Questo è un modo semplice e veloce per formattare una stringa JSON di input! Quando si lavora con i POJO, invece di leggere da un determinato input, eseguiremo solo la conversione da Object a JSON e abiliteremo la stampa graziosa:

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
}

Impostazione globale Pretty-Print

In alternativa, puoi abilitare la stampa graziosa globale, se questo è il comportamento globale preferibile di Jackson per il tuo progetto. Questo è facile come usare il enable() metodo del ObjectMapper() esempio quando lo stai istanziando:

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

Non appena scrivi un oggetto come stringa JSON, la stampa graziosa sarà abilitata per impostazione predefinita:

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

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

Questo risulta in:

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

Con i POJO:

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

Dai un'occhiata alla nostra guida pratica e pratica per l'apprendimento di Git, con le migliori pratiche, gli standard accettati dal settore e il cheat sheet incluso. Smetti di cercare su Google i comandi Git e in realtà imparare esso!

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

Questo approccio è significativamente meno dettagliato se la stampa graziosa è un formato di visualizzazione comune.

Jackson in bella stampa con stivale a molla

Se stai usando Spring Boot, senza un manuale ObjectMapper istanza in fase di creazione e fare affidamento sul serializzatore sottostante, è possibile impostare il indent_output bandiera a true nel application.properties file:

spring.jackson.serialization.indent_output=true

Oppure, in application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Questo imposta il SerializationFeature.INDENT_OUTPUT bandiera in primavera ObjectMapper esempio.

Conclusione

In questo breve tutorial, abbiamo dato un'occhiata a come stampare JSON da una stringa o da un POJO usando Jackson. Abbiamo esplorato le modifiche alla stampa singola (quando si desidera stampare una sola volta) e l'impostazione della bandiera Jackson globale per ObjectMapper. Infine, abbiamo dato un'occhiata alla modifica delle proprietà di Spring Boot per consentire una bella stampa con Jackson.

Timestamp:

Di più da Impilamento