Pretty-Printing JSON met Jackson in Java en Spring Boot

Jackson is een van de meest gebruikte bibliotheken voor het werken met serialisatie en deserialisatie in Java en Spring Boot, voornamelijk gebruikt voor het ontleden en converteren tussen POJO's en JSON.

Als je echter met Jackson hebt gewerkt, merk je standaard een duidelijk gebrek aan mooie afdrukken:

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

In deze korte zelfstudie leert u hoe u JSON mooi kunt afdrukken met Jackson in standaard Java en met Spring Boot.

We werken met een JSON-string en een POJO omgezet in een JSON-string, omdat deze zich anders gedragen:

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

Laten we een instantiรซren Book instantie, en een string voor de invoer:

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

Als u gewoon รฉรฉn keer mooi wilt afdrukken, in รฉรฉn gesprek, in plaats van de algemene afdrukvlag in te stellen, kunt u gewoon de writerWithDefaultPrettyPrinter() aanroepen voordat u een waarde als een tekenreeks schrijft:

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

De invoertekenreeks is gelezen van (JSON-naar-Object) en de waarde van dit object is teruggeschreven naar een tekenreeks, met behulp van pretty-printing (Object-naar-JSON):

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

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

Als alternatief, bij gebruik van readTree(), het resultaat JsonNode een toPrettyString() functie die dient als een geweldige eenvoudige manier om strings om te zetten naar een mooi afgedrukte JSON:

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

Dit is een snelle en eenvoudige manier om een โ€‹โ€‹invoer-JSON-tekenreeks te formatteren! Wanneer we met POJO's werken, zullen we, in plaats van te lezen van een bepaalde invoer, alleen Object-naar-JSON-conversie uitvoeren en mooie afdrukken inschakelen:

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-instelling

Als alternatief kunt u global pretty-printing inschakelen, als dat de voorkeur heeft voor het globale gedrag van Jackson voor uw project. Dit is net zo eenvoudig als het gebruik van de enable() methode van de ObjectMapper() instantie wanneer u het instantiรซren:

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

Zodra u een object als een JSON-tekenreeks schrijft, wordt pretty-printing standaard ingeschakeld:

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

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

Dit resulteert in:

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

Met POJO's:

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

Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!

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

Deze benadering is aanzienlijk minder uitgebreid als mooie afdrukken een veelgebruikt weergaveformaat is.

Pretty-Printing Jackson met Spring Boot

Als je Spring Boot gebruikt, zonder handleiding ObjectMapper instantie wordt gemaakt en vertrouwt op de onderliggende serializer, kunt u de indent_output vlag naar true in de application.properties file:

spring.jackson.serialization.indent_output=true

Of, in application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Dit zet de SerializationFeature.INDENT_OUTPUT vlag in de lente ObjectMapper aanleg.

Conclusie

In deze korte tutorial hebben we bekeken hoe je JSON mooi kunt afdrukken vanuit een String of POJO met Jackson. We hebben wijzigingen in enkele afdrukken onderzocht (wanneer u maar รฉรฉn keer mooi wilt afdrukken) en de wereldwijde Jackson-vlag instellen voor ObjectMapper. Ten slotte hebben we gekeken naar het wijzigen van Spring Boot-eigenschappen om mooi afdrukken met Jackson mogelijk te maken.

Tijdstempel:

Meer van Stapelmisbruik