Pretty-Printing JSON med Jackson i Java og Spring Boot

Jackson er et af de mest almindelige biblioteker til at arbejde med serialisering og deserialisering i Java og Spring Boot, primært brugt til at parse og konvertere mellem POJO'er og JSON.

Selvom du har arbejdet med Jackson, vil du som standard bemærke en tydelig mangel på smukt tryk:

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

I denne korte vejledning lærer du, hvordan du smukt printer JSON med Jackson i standard Java og med Spring Boot.

Vi arbejder med en JSON-streng og en POJO konverteret til en JSON-streng, da disse opfører sig anderledes:

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

Lad os instansiere en Book instans, og en streng for 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 med Jackson Once

Hvis du blot ønsker at smuk-printe én gang, i et enkelt opkald, i stedet for at indstille det globale udskrivningsflag – kan du blot bruge writerWithDefaultPrettyPrinter() kald før du skriver en værdi 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);

Inputstrengen blev læst fra (JSON-to-Object), og værdien af ​​dette objekt blev skrevet tilbage i en streng ved hjælp af 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 brug readTree(), det resulterende JsonNode har en toPrettyString() funktion, der fungerer som en fantastisk enkel måde at konvertere strenge til smukt trykt JSON:

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

Dette er en hurtig og enkel måde at formatere en input-JSON-streng! Når vi arbejder med POJO'er, vil vi i stedet for at læse fra et givet input kun udføre objekt-til-JSON-konvertering og aktivere smuk udskrivning:

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 indstilling

Alternativt kan du aktivere global smuk-udskrivning, hvis det er Jacksons foretrukne globale adfærd til dit projekt. Dette er lige så nemt som at bruge enable() metode af 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 aktiveret 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 POJO'er:

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

Tjek vores praktiske, praktiske guide til at lære Git, med bedste praksis, brancheaccepterede standarder og inkluderet snydeark. Stop med at google Git-kommandoer og faktisk lærer det!

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

Denne tilgang er betydeligt mindre omfattende, hvis smuk udskrivning er et almindeligt visningsformat.

Pretty-Printing Jackson med fjederstøvle

Hvis du bruger Spring Boot, uden en manual ObjectMapper instans, der oprettes og stole på den underliggende serializer, kan du indstille indent_output flag til true i application.properties fil:

spring.jackson.serialization.indent_output=true

Eller i application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Dette indstiller SerializationFeature.INDENT_OUTPUT flag i foråret ObjectMapper instans.

Konklusion

I denne korte vejledning har vi taget et kig på, hvordan du smukt kan printe JSON fra en streng eller POJO ved hjælp af Jackson. Vi har undersøgt ændringer i enkelttryk (når du kun ønsker at printe smukt én gang) og indstillet det globale Jackson-flag for ObjectMapper. Til sidst tog vi et kig på at ændre Spring Boot-egenskaber for at muliggøre smuk udskrivning med Jackson.

Tidsstempel:

Mere fra Stablemisbrug