Szépen nyomtatható JSON Jacksonnal Java és Spring Boot rendszerben

A Jackson az egyik legelterjedtebb könyvtár a Java és Spring Boot szerializálására és deszerializálására, elsősorban a POJO-k és a JSON közötti elemzésre és konvertálásra.

Ha azonban Jacksonnal dolgozott, észre fogja venni, hogy alapértelmezés szerint hiányzik a szép nyomtatás:

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

Ebből a rövid oktatóanyagból megtudhatja, hogyan nyomtathat szépen JSON-t Jackson-nal szabványos Java-ban és Spring Boot-tal.

JSON-karakterlánccal és JSON-karakterláncsá konvertált POJO-val fogunk dolgozni, mivel ezek eltérően viselkednek:

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

Példányosítsuk a Book példány, és egy karakterlánc a bemenethez:

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 Jackson Once segítségével

Ha egyszerűen csak egyszer, egyetlen hívásban szeretne szépet nyomtatni, ahelyett, hogy beállítaná a globális nyomtatási zászlót – egyszerűen használja a writerWithDefaultPrettyPrinter() hívja meg, mielőtt egy értéket karakterláncként írna:

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

A bemeneti karakterláncot a rendszer beolvassa (JSON-to-Object), és ennek az objektumnak az értékét visszaírta egy karakterláncba szép nyomtatással (Object-to-JSON):

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

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

Alternatív megoldásként használat közben readTree(), a kapott JsonNode egy toPrettyString() függvény, amely nagyszerű egyszerű módja annak, hogy a karakterláncokat szépen nyomtatott JSON-ba konvertálja:

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

Ez egy gyors és egyszerű módja a bemeneti JSON karakterlánc formázásának! Amikor POJO-kkal dolgozunk, ahelyett, hogy egy adott bemenetről olvasnánk, csak az objektum-JSON konverziót hajtjuk végre, és lehetővé tesszük a szép nyomtatást:

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
}

Globális Pretty-Print beállítás

Alternatív megoldásként engedélyezheti a globális szép nyomtatást, ha ez Jackson preferált globális viselkedése a projektben. Ez olyan egyszerű, mint a enable() módszer a ObjectMapper() például, amikor példányosítod:

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

Amint egy objektumot ír JSON-karakterláncként, a szép nyomtatás alapértelmezés szerint engedélyezve lesz:

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

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

Ennek eredményeként:

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

POJO-kkal:

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

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

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

Ez a megközelítés lényegesen kevésbé bőbeszédű, ha a szép nyomtatás elterjedt megjelenítési formátum.

Csinos nyomtatású Jackson rugós csizmával

Ha Spring Bootot használ, kézikönyv nélkül ObjectMapper példány létrehozása és az alapul szolgáló szerializálóra támaszkodva beállíthatja a indent_output zászlóval true a application.properties file:

spring.jackson.serialization.indent_output=true

Vagy, ben application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Ez beállítja a SerializationFeature.INDENT_OUTPUT zászló a tavaszban ObjectMapper példa.

Következtetés

Ebben a rövid oktatóanyagban megnéztük, hogyan nyomtathat ki szépen JSON-t karakterláncból vagy POJO-ból Jackson használatával. Megvizsgáltuk az egynyomatos módosításokat (amikor csak egyszer szeretne szépet nyomtatni), és a globális Jackson-zászló beállítását ObjectMapper. Végül megvizsgáltuk a Spring Boot tulajdonságainak megváltoztatását, hogy lehetővé tegye a szép nyomtatást Jacksonnal.

Időbélyeg:

Még több Stackabus