Pretty-Printing JSON dengan Jackson di Java dan Spring Boot

Jackson adalah salah satu perpustakaan paling umum untuk bekerja dengan serialisasi dan deserialisasi di Java dan Spring Boot, terutama digunakan untuk menguraikan dan mengonversi antara POJO dan JSON.

Padahal, jika Anda pernah bekerja dengan Jackson, Anda akan melihat kurangnya pencetakan cantik secara default:

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

Dalam tutorial singkat ini, Anda akan belajar bagaimana mencetak cantik JSON dengan Jackson di Java standar dan dengan Spring Boot.

Kami akan bekerja dengan string JSON, dan POJO diubah menjadi string JSON, karena ini berperilaku berbeda:

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

Mari kita instantiate a Book instance, dan string untuk input:

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 dengan Jackson Once

Jika Anda hanya ingin mencetak cantik sekali, dalam satu panggilan, daripada menyetel bendera pencetakan global โ€“ Anda cukup menggunakan writerWithDefaultPrettyPrinter() panggil sebelum menulis nilai sebagai string:

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

String input dibaca dari (JSON-to-Object), dan nilai objek ini ditulis kembali menjadi string, menggunakan pretty-printing (Object-to-JSON):

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

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

Atau, saat menggunakan readTree(), hasilnya JsonNode memiliki toPrettyString() fungsi yang berfungsi sebagai cara sederhana yang bagus untuk mengonversi string ke JSON yang dicetak cantik:

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

Ini adalah cara cepat dan sederhana untuk memformat string JSON input! Saat bekerja dengan POJO, alih-alih membaca dari input yang diberikan, kami hanya akan melakukan konversi Object-to-JSON dan mengaktifkan pencetakan cantik:

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
}

Pengaturan Cetak Cantik Global

Atau, Anda dapat mengaktifkan pencetakan cantik global, jika itu adalah perilaku global Jackson yang lebih disukai untuk proyek Anda. Ini semudah menggunakan enable() metode dari ObjectMapper() contoh saat Anda membuat instance:

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

Segera setelah Anda menulis objek sebagai string JSON โ€“ pencetakan cantik akan diaktifkan secara default:

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

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

Ini menghasilkan:

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

Dengan POJO:

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

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!

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

Pendekatan ini secara signifikan kurang bertele-tele jika pencetakan cantik adalah format tampilan yang umum.

Pretty-Printing Jackson dengan Spring Boot

Jika Anda menggunakan Spring Boot, tanpa manual ObjectMapper contoh sedang dibuat dan mengandalkan serializer yang mendasarinya, Anda dapat mengatur indent_output bendera ke true dalam application.properties File:

spring.jackson.serialization.indent_output=true

Atau, dalam application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Ini menetapkan SerializationFeature.INDENT_OUTPUT bendera di musim semi ObjectMapper contoh.

Kesimpulan

Dalam tutorial singkat ini, kita telah melihat bagaimana Anda dapat mencetak JSON dengan cantik dari sebuah String atau POJO menggunakan Jackson. Kami telah menjelajahi perubahan cetak tunggal (ketika Anda hanya ingin mencetak cantik sekali) dan menyetel bendera Jackson global untuk ObjectMapper. Akhirnya, kami melihat perubahan properti Spring Boot untuk mengaktifkan pencetakan cantik dengan Jackson.

Stempel Waktu:

Lebih dari penyalahgunaan