Pretty-Printing JSON med Jackson i Java og Spring Boot

Jackson er et av de vanligste bibliotekene for å jobbe med serialisering og deserialisering i Java og Spring Boot, primært brukt til å analysere og konvertere mellom POJOs og JSON.

Skjønt, hvis du har jobbet med Jackson, vil du legge merke til en tydelig mangel på pen utskrift som standard:

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

I denne korte opplæringen lærer du hvordan du pent skriver ut JSON med Jackson i standard Java og med Spring Boot.

Vi skal jobbe med en JSON-streng og en POJO konvertert til en JSON-streng, siden disse oppfører seg annerledes:

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

La oss instansiere en Book forekomst, og en streng for inngangen:

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

Hvis du ønsker å ganske enkelt skrive ut én gang, i en enkelt samtale, i stedet for å sette det globale utskriftsflagget – kan du ganske enkelt bruke writerWithDefaultPrettyPrinter() ring før du skriver en verdi som en streng:

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

Inndatastrengen ble lest fra (JSON-to-Object), og verdien til dette objektet ble skrevet tilbake til en streng, ved hjelp av pretty-printing (Object-to-JSON):

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

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

Alternativt ved bruk readTree(), Resultatet JsonNode har en toPrettyString() funksjon som fungerer som en flott enkel måte å konvertere strenger til pen-trykt JSON:

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

Dette er en rask og enkel måte å formatere en JSON-streng! Når du arbeider med POJO-er, i stedet for å lese fra en gitt inngang, vil vi kun utføre objekt-til-JSON-konvertering og aktivere pen utskrift:

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
}

Global Pretty-Print-innstilling

Alternativt kan du aktivere global pen utskrift, hvis det er den globale oppførselen til Jackson å foretrekke for prosjektet ditt. Dette er like enkelt som å bruke enable() metode av ObjectMapper() eksempel når du instansierer det:

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

Så snart du skriver et objekt som en JSON-streng – vil pretty-printing være aktivert som standard:

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

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

Dette resulterer i:

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

Med POJOs:

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

Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!

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

Denne tilnærmingen er betydelig mindre detaljert hvis pen utskrift er et vanlig visningsformat.

Pretty-Printing Jackson med Spring Boot

Hvis du bruker Spring Boot, uten bruksanvisning ObjectMapper forekomst som opprettes og stole på den underliggende serializeren, kan du angi indent_output flagg til true i application.properties file:

spring.jackson.serialization.indent_output=true

Eller i application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Dette setter SerializationFeature.INDENT_OUTPUT flagg på våren ObjectMapper forekomst.

konklusjonen

I denne korte opplæringen har vi tatt en titt på hvordan du kan skrive ut JSON fra en streng eller POJO ved å bruke Jackson. Vi har utforsket endringer i enkelttrykk (når du bare ønsker å pen-trykke én gang) og satt det globale Jackson-flagget for ObjectMapper. Til slutt tok vi en titt på endring av Spring Boot-egenskaper for å muliggjøre pen utskrift med Jackson.

Tidstempel:

Mer fra Stackabuse