Jackson เป็นหนึ่งในไลบรารี่ทั่วไปที่สุดสำหรับการทำงานกับการทำให้เป็นอนุกรมและการดีซีเรียลไลซ์เซชั่นใน Java และ Spring Boot ซึ่งส่วนใหญ่ใช้สำหรับการแยกวิเคราะห์และการแปลงระหว่าง POJO และ JSON
แม้ว่าถ้าคุณเคยร่วมงานกับแจ็คสัน คุณจะสังเกตเห็นว่าไม่มีการพิมพ์ที่สวยงามตามค่าเริ่มต้น:
{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
ในบทช่วยสอนสั้นๆ นี้ คุณจะได้เรียนรู้วิธีพิมพ์ JSON ให้สวยงามด้วย Jackson ใน Java มาตรฐานและด้วย Spring Boot
เราจะทำงานกับสตริง JSON และ POJO ที่แปลงเป็นสตริง JSON เนื่องจากสิ่งเหล่านี้ทำงานแตกต่างกัน:
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;
}
มายกตัวอย่าง a Book
อินสแตนซ์และสตริงสำหรับอินพุต:
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
หากคุณต้องการพิมพ์สวยเพียงครั้งเดียว ในการโทรครั้งเดียว แทนที่จะตั้งค่าสถานะการพิมพ์ทั่วโลก คุณสามารถใช้ writerWithDefaultPrettyPrinter()
โทรก่อนเขียนค่าเป็นสตริง:
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);
สตริงอินพุตถูกอ่านจาก (JSON-to-Object) และค่าของอ็อบเจ็กต์นี้ถูกเขียนกลับเป็นสตริงโดยใช้การพิมพ์แบบสวย (Object-to-JSON):
{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
{
"Task 1" : "In_Progress",
"Task 2" : "Done",
"Task 3" : "Planned"
}
หรือเมื่อใช้ readTree()
, ผลลัพท์ที่ได้ JsonNode
มี toPrettyString()
ฟังก์ชันที่ทำหน้าที่เป็นวิธีง่ายๆ ในการแปลงสตริงเป็น JSON ที่พิมพ์สวย:
ObjectMapper mapper = new ObjectMapper();
Object jsonString = mapper.readTree(inputString).toPrettyString();
System.out.println(jsonString);
นี่เป็นวิธีที่รวดเร็วและง่ายดายในการจัดรูปแบบสตริง JSON อินพุต! เมื่อทำงานกับ POJO แทนที่จะอ่านจากอินพุตที่กำหนด เราจะทำการแปลง Object-to-JSON และเปิดใช้งานการพิมพ์ที่สวยงามเท่านั้น:
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
อีกวิธีหนึ่ง คุณสามารถเปิดใช้งานการพิมพ์แบบสวย ๆ ทั่วโลกได้ หากนั่นเป็นพฤติกรรมทั่วโลกที่ดีกว่าของ Jackson สำหรับโครงการของคุณ ง่ายเหมือนการใช้ enable()
วิธีการของ ObjectMapper()
ตัวอย่างเมื่อคุณสร้างอินสแตนซ์:
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
ทันทีที่คุณเขียนวัตถุเป็นสตริง JSON – การพิมพ์แบบสวยจะเปิดใช้งานตามค่าเริ่มต้น:
Object jsonString = mapper.readValue(inputString, Object.class);
String indentedString = mapper.writeValueAsString(jsonString);
System.out.println(jsonString);
System.out.println(indentedString);
ผลลัพธ์นี้ใน:
{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
{
"Task 1" : "In_Progress",
"Task 2" : "Done",
"Task 3" : "Planned"
}
ด้วย POJO:
String jsonBook = mapper.writeValueAsString(book);
System.out.println(jsonBook);
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
{
"title" : "Our Mathematical Universe",
"author" : "Max Tegmark",
"releaseYear" : 2014
}
วิธีการนี้ใช้ความละเอียดน้อยลงอย่างมากหากการพิมพ์ที่สวยงามเป็นรูปแบบการแสดงผลทั่วไป
แจ็กสันพิมพ์ลายสวยด้วย Spring Boot
หากคุณกำลังใช้ Spring Boot โดยไม่มีคู่มือ ObjectMapper
อินสแตนซ์ที่กำลังสร้างและพึ่งพา Serializer พื้นฐาน คุณสามารถตั้งค่า indent_output
ตั้งค่าสถานะเป็น true
ใน application.properties
ไฟล์:
spring.jackson.serialization.indent_output=true
หรือใน application.yaml
:
spring:
jackson:
serialization:
INDENT_OUTPUT: true
สิ่งนี้ทำให้ SerializationFeature.INDENT_OUTPUT
ธงในฤดูใบไม้ผลิ ObjectMapper
ตัวอย่าง.
สรุป
ในบทช่วยสอนสั้นๆ นี้ เราได้มาดูวิธีที่คุณสามารถพิมพ์ JSON จากสตริงหรือ POJO โดยใช้ Jackson ได้อย่างสวยงาม เราได้สำรวจการเปลี่ยนแปลงแบบพิมพ์ครั้งเดียว (เมื่อคุณต้องการพิมพ์เพียงครั้งเดียว) และตั้งค่าสถานะ Jackson ทั่วโลกสำหรับ ObjectMapper
. สุดท้าย เรามาดูการเปลี่ยนแปลงคุณสมบัติของ Spring Boot เพื่อเปิดใช้งานการพิมพ์ที่สวยงามด้วย Jackson