Pretty-Printing JSON mit Jackson in Java und Spring Boot

Jackson ist eine der gängigsten Bibliotheken für die Arbeit mit Serialisierung und Deserialisierung in Java und Spring Boot, die hauptsächlich zum Parsen und Konvertieren zwischen POJOs und JSON verwendet wird.

Wenn Sie jedoch mit Jackson gearbeitet haben, werden Sie standardmäßig einen deutlichen Mangel an hübschem Druck bemerken:

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

In diesem kurzen Tutorial erfahren Sie, wie Sie JSON mit Jackson in Standard-Java und mit Spring Boot schön drucken.

Wir werden mit einem JSON-String und einem in einen JSON-String konvertierten POJO arbeiten, da sich diese unterschiedlich verhalten:

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

Lassen Sie uns a instanziieren Book Instanz und eine Zeichenfolge für die Eingabe:

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 mit Jackson Once

Wenn Sie einfach einmal in einem einzigen Aufruf hübsch drucken möchten, anstatt das globale Druckflag zu setzen, können Sie einfach die verwenden writerWithDefaultPrettyPrinter() aufrufen, bevor ein Wert als String geschrieben wird:

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

Die Eingabezeichenfolge wurde aus gelesen (JSON-to-Object), und der Wert dieses Objekts wurde mithilfe von Pretty-Printing (Object-to-JSON) in eine Zeichenfolge zurückgeschrieben:

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

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

Alternativ bei Verwendung von readTree(), das Ergebnis JsonNode hat eine toPrettyString() Funktion, die als großartige einfache Möglichkeit dient, Zeichenfolgen in hübsch gedrucktes JSON zu konvertieren:

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

Dies ist eine schnelle und einfache Möglichkeit, eine JSON-Eingabezeichenfolge zu formatieren! Wenn Sie mit POJOs arbeiten, führen wir, anstatt aus einer bestimmten Eingabe zu lesen, nur eine Objekt-zu-JSON-Konvertierung durch und aktivieren das hübsche Drucken:

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
}

Globale Pretty-Print-Einstellung

Alternativ können Sie globales Pretty-Printing aktivieren, wenn dies das bevorzugte globale Verhalten von Jackson für Ihr Projekt ist. Dies ist so einfach wie die Verwendung von enable() Methode der ObjectMapper() Beispiel, wenn Sie es instanziieren:

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

Sobald Sie ein Objekt als JSON-String schreiben, wird Pretty-Printing standardmäßig aktiviert:

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

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

Das führt zu:

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

Mit POJOs:

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

Sehen Sie sich unseren praxisnahen, praktischen Leitfaden zum Erlernen von Git an, mit Best Practices, branchenweit akzeptierten Standards und einem mitgelieferten Spickzettel. Hören Sie auf, Git-Befehle zu googeln und tatsächlich in Verbindung, um es!

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

Dieser Ansatz ist wesentlich weniger ausführlich, wenn Pretty-Printing ein gängiges Anzeigeformat ist.

Pretty-Printing Jackson mit Spring Boot

Wenn Sie Spring Boot verwenden, ohne Handbuch ObjectMapper Instanz erstellt wird und sich auf den zugrunde liegenden Serialisierer verlässt, können Sie die indent_output Flagge zu true der application.properties Datei:

spring.jackson.serialization.indent_output=true

Oder, in application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Dies setzt die SerializationFeature.INDENT_OUTPUT Flagge im Frühling ObjectMapper Beispiel.

Zusammenfassung

In diesem kurzen Tutorial haben wir uns angesehen, wie Sie mit Jackson JSON aus einem String oder POJO schön drucken können. Wir haben Einzeldruckänderungen untersucht (wenn Sie nur einmal schön drucken möchten) und das globale Jackson-Flag für gesetzt ObjectMapper. Schließlich haben wir uns die Änderung der Spring Boot-Eigenschaften angesehen, um hübsches Drucken mit Jackson zu ermöglichen.

Zeitstempel:

Mehr von Stapelmissbrauch