Jolie impression JSON avec Jackson en Java et Spring Boot

Jackson est l'une des bibliothèques les plus courantes pour travailler avec la sérialisation et la désérialisation dans Java et Spring Boot, principalement utilisée pour l'analyse et la conversion entre POJO et JSON.

Cependant, si vous avez travaillé avec Jackson, vous remarquerez un manque évident de jolie impression par défaut :

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

Dans ce court didacticiel, vous apprendrez à imprimer joliment JSON avec Jackson en Java standard et avec Spring Boot.

Nous allons travailler avec une chaîne JSON et un POJO converti en chaîne JSON, car ils se comportent différemment :

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

Instancions un Book instance, et une chaîne pour l'entrée :

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

Jolie impression JSON avec Jackson Once

Si vous souhaitez simplement imprimer une fois, en un seul appel, plutôt que de définir l'indicateur d'impression global, vous pouvez simplement utiliser le writerWithDefaultPrettyPrinter() appeler avant d'écrire une valeur sous forme de chaîne :

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 chaîne d'entrée a été lue à partir de (JSON-to-Object) et la valeur de cet objet a été réécrite dans une chaîne, à l'aide de la jolie impression (Object-to-JSON) :

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

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

Alternativement, lors de l'utilisation readTree(), la résultante JsonNode possède de toPrettyString() fonction qui constitue un excellent moyen simple de convertir des chaînes en JSON joliment imprimé :

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

C'est un moyen simple et rapide de formater une chaîne JSON d'entrée ! Lorsque vous travaillez avec des POJO, au lieu de lire à partir d'une entrée donnée, nous n'effectuerons que la conversion Object-to-JSON et activerons la jolie impression :

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
}

Paramètre global de jolie impression

Alternativement, vous pouvez activer la jolie impression globale, si c'est le comportement global préférable de Jackson pour votre projet. C'est aussi simple que d'utiliser le enable() méthode de ObjectMapper() instance lorsque vous l'instanciez :

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

Dès que vous écrivez un objet sous forme de chaîne JSON, la jolie impression sera activée par défaut :

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

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

Cela se traduit par:

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

Avec les POJO :

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

Consultez notre guide pratique et pratique pour apprendre Git, avec les meilleures pratiques, les normes acceptées par l'industrie et la feuille de triche incluse. Arrêtez de googler les commandes Git et en fait apprendre il!

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

Cette approche est nettement moins détaillée si la jolie impression est un format d'affichage courant.

Jolie impression Jackson avec Spring Boot

Si vous utilisez Spring Boot, sans manuel ObjectMapper instance en cours de création et s'appuyer sur le sérialiseur sous-jacent, vous pouvez définir le indent_output drapeau à true dans l' application.properties fichier:

spring.jackson.serialization.indent_output=true

Ou, dans application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Cela définit le SerializationFeature.INDENT_OUTPUT drapeau au printemps ObjectMapper exemple.

Conclusion

Dans ce court didacticiel, nous avons examiné comment vous pouvez joliment imprimer JSON à partir d'une chaîne ou d'un POJO à l'aide de Jackson. Nous avons exploré les changements d'impression unique (lorsque vous ne voulez imprimer qu'une seule fois) et défini le drapeau Jackson global pour ObjectMapper. Enfin, nous avons examiné la modification des propriétés de Spring Boot pour permettre une jolie impression avec Jackson.

Horodatage:

Plus de Stackabuse