Jackson là một trong những thư viện phổ biến nhất để làm việc với tuần tự hóa và giải mã hóa trong Java và Spring Boot, chủ yếu được sử dụng để phân tích cú pháp và chuyển đổi giữa POJO và JSON.
Mặc dù vậy, nếu bạn đã làm việc với Jackson, bạn sẽ nhận thấy sự thiếu rõ ràng của việc in ấn đẹp theo mặc định:
{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
Trong hướng dẫn ngắn này, bạn sẽ học cách in JSON đẹp mắt với Jackson trong Java tiêu chuẩn và với Spring Boot.
Chúng tôi sẽ làm việc với một chuỗi JSON và một POJO được chuyển đổi thành một chuỗi JSON, vì chúng hoạt động khác nhau:
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;
}
Hãy tạo một Book
phiên bản và một chuỗi cho đầu vào:
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 với Jackson Once
Nếu bạn chỉ muốn in đẹp một lần, trong một cuộc gọi, thay vì đặt cờ in toàn cầu - bạn có thể chỉ cần sử dụng writerWithDefaultPrettyPrinter()
gọi trước khi viết giá trị dưới dạng chuỗi:
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);
Chuỗi đầu vào đã được đọc từ (JSON-to-Object) và giá trị của đối tượng này được ghi lại thành một chuỗi, sử dụng tính năng in đẹp (Object-to-JSON):
{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
{
"Task 1" : "In_Progress",
"Task 2" : "Done",
"Task 3" : "Planned"
}
Ngoài ra, khi sử dụng readTree()
, kết quả JsonNode
có một toPrettyString()
hàm đóng vai trò như một cách đơn giản tuyệt vời để chuyển đổi các chuỗi thành JSON được in đẹp mắt:
ObjectMapper mapper = new ObjectMapper();
Object jsonString = mapper.readTree(inputString).toPrettyString();
System.out.println(jsonString);
Đây là một cách nhanh chóng và đơn giản để định dạng một chuỗi JSON đầu vào! Khi làm việc với POJO, thay vì đọc từ một đầu vào nhất định, chúng tôi sẽ chỉ thực hiện chuyển đổi Đối tượng thành JSON và cho phép in đẹp:
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
}
Cài đặt in đẹp toàn cầu
Ngoài ra, bạn có thể kích hoạt tính năng in ấn đẹp toàn cầu, nếu đó là hành vi toàn cầu thích hợp của Jackson cho dự án của bạn. Điều này dễ dàng như sử dụng enable()
phương pháp của ObjectMapper()
ví dụ khi bạn khởi tạo nó:
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
Ngay sau khi bạn viết một đối tượng dưới dạng chuỗi JSON - tính năng in ấn đẹp sẽ được bật theo mặc định:
Object jsonString = mapper.readValue(inputString, Object.class);
String indentedString = mapper.writeValueAsString(jsonString);
System.out.println(jsonString);
System.out.println(indentedString);
Kết quả này trong:
{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
{
"Task 1" : "In_Progress",
"Task 2" : "Done",
"Task 3" : "Planned"
}
Với POJOs:
String jsonBook = mapper.writeValueAsString(book);
System.out.println(jsonBook);
Xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, các tiêu chuẩn được ngành công nghiệp chấp nhận và bảng lừa đảo đi kèm. Dừng lệnh Googling Git và thực sự học nó!
{
"title" : "Our Mathematical Universe",
"author" : "Max Tegmark",
"releaseYear" : 2014
}
Cách tiếp cận này ít dài dòng hơn đáng kể nếu in ấn đẹp là một định dạng hiển thị phổ biến.
Jackson in ấn đẹp với khởi động mùa xuân
Nếu bạn đang sử dụng Spring Boot mà không có sách hướng dẫn ObjectMapper
phiên bản đang được tạo và dựa vào trình tuần tự bên dưới, bạn có thể đặt indent_output
gắn cờ cho true
trong application.properties
tập tin:
spring.jackson.serialization.indent_output=true
Hoặc, trong application.yaml
:
spring:
jackson:
serialization:
INDENT_OUTPUT: true
Điều này đặt SerializationFeature.INDENT_OUTPUT
cờ trong mùa xuân của ObjectMapper
ví dụ.
Kết luận
Trong hướng dẫn ngắn này, chúng tôi đã xem xét cách bạn có thể in JSON đẹp mắt từ Chuỗi hoặc POJO bằng cách sử dụng Jackson. Chúng tôi đã khám phá những thay đổi về bản in một lần (khi bạn chỉ muốn in đẹp một lần) và đặt cờ Jackson toàn cầu cho ObjectMapper
. Cuối cùng, chúng tôi đã xem xét việc thay đổi các thuộc tính Spring Boot để cho phép in ấn đẹp với Jackson.