JSON in ấn đẹp với Jackson trong Java và Spring Boot

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.

Dấu thời gian:

Thêm từ xếp chồng lên nhau