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.