Pretty-Printing JSON cu Jackson în Java și Spring Boot

Jackson este una dintre cele mai comune biblioteci pentru lucrul cu serializarea și deserializarea în Java și Spring Boot, folosită în principal pentru analizarea și conversia între POJO și JSON.

Deși, dacă ați lucrat cu Jackson, veți observa o lipsă clară de tipărire destul de implicită:

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

În acest scurt tutorial, veți învăța cum să imprimați destul de mult JSON cu Jackson în Java standard și cu Spring Boot.

Vom lucra cu un șir JSON și un POJO convertit într-un șir JSON, deoarece acestea se comportă diferit:

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

Să instanțiem a Book exemplu și un șir pentru intrare:

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

Dacă doriți să imprimați pur și simplu o dată, într-un singur apel, în loc să setați marcajul de imprimare globală - puteți utiliza pur și simplu writerWithDefaultPrettyPrinter() apel înainte de a scrie o valoare ca șir:

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

Șirul de intrare a fost citit din (JSON-to-Object), iar valoarea acestui obiect a fost scrisă înapoi într-un șir, folosind 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"
}

Alternativ, atunci când utilizați readTree(), rezultați JsonNode are o toPrettyString() funcție care servește ca o modalitate simplă excelentă de a converti șirurile în JSON destul de imprimat:

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

Aceasta este o modalitate rapidă și simplă de a formata un șir JSON de intrare! Când lucrăm cu POJO, în loc să citim dintr-o intrare dată, vom efectua doar conversie Object-to-JSON și vom activa imprimarea destul de:

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
}

Setare globală Pretty-Print

Alternativ, puteți activa imprimarea globală destul de mult, dacă acesta este comportamentul global preferabil al lui Jackson pentru proiectul dvs. Acest lucru este la fel de ușor ca și utilizarea enable() metodă a ObjectMapper() exemplu când îl instanțiezi:

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

De îndată ce scrieți un obiect ca șir JSON - imprimarea destul de va fi activată în mod implicit:

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

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

Rezultă:

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

Cu POJO-uri:

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

Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!

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

Această abordare este semnificativ mai puțin pronunțată dacă imprimarea destul de este un format de afișare comun.

Pretty-Printing Jackson cu Spring Boot

Dacă utilizați Spring Boot, fără un manual ObjectMapper instanța fiind creată și se bazează pe serializatorul de bază, puteți seta indent_output steag la true în application.properties fișier:

spring.jackson.serialization.indent_output=true

Sau, în application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Aceasta stabilește SerializationFeature.INDENT_OUTPUT steag în primăvară ObjectMapper instanță.

Concluzie

În acest scurt tutorial, am aruncat o privire asupra modului în care puteți imprima destul de mult JSON dintr-un String sau POJO folosind Jackson. Am explorat modificări de tipărire unică (când doriți să imprimați destul de o singură dată) și am setat steagul Jackson global pentru ObjectMapper. În cele din urmă, ne-am uitat la modificarea proprietăților Spring Boot pentru a permite imprimarea frumoasă cu Jackson.

Timestamp-ul:

Mai mult de la Stackabuse