Java ve Spring Boot'da Jackson ile Pretty-Printing JSON

Jackson, Java ve Spring Boot'ta serileştirme ve seri durumdan çıkarma ile çalışmak için en yaygın kitaplıklardan biridir ve öncelikle POJO'lar ve JSON arasında ayrıştırma ve dönüştürme için kullanılır.

Yine de, Jackson ile çalıştıysanız, varsayılan olarak belirgin bir güzel baskı eksikliği fark edeceksiniz:

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

Bu kısa öğreticide, JSON'u Jackson ile standart Java'da ve Spring Boot ile güzel bir şekilde nasıl yazdıracağınızı öğreneceksiniz.

Bir JSON dizisi ve JSON dizisine dönüştürülmüş bir POJO ile çalışacağız, çünkü bunlar farklı davranır:

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

Bir somutlaştıralım Book örnek ve giriş için bir dize:

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

Jackson Once ile Pretty-Print JSON

Genel yazdırma bayrağını ayarlamak yerine, tek bir çağrıda bir kez güzel yazdırmak isterseniz, writerWithDefaultPrettyPrinter() dizge olarak bir değer yazmadan önce arayın:

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

Giriş dizesi (JSON-to-Object) öğesinden okundu ve bu nesnenin değeri, güzel yazdırma (Object-to-JSON) kullanılarak bir dizeye geri yazıldı:

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

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

Alternatif olarak, kullanırken readTree(), sonuç JsonNode Sahiptir-A toPrettyString() dizeleri güzel yazdırılmış JSON'a dönüştürmenin harika ve basit bir yolu olarak hizmet eden işlev:

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

Bu, bir giriş JSON dizesini biçimlendirmenin hızlı ve basit bir yoludur! POJO'larla çalışırken, belirli bir girdiden okumak yerine yalnızca Nesneden JSON'a dönüştürme gerçekleştireceğiz ve güzel yazdırmayı etkinleştireceğiz:

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 Güzel Baskı Ayarı

Alternatif olarak, eğer projeniz için Jackson'ın tercih edilen global davranışı buysa, global güzel baskıyı etkinleştirebilirsiniz. Bu, kullanmak kadar kolay enable() yöntem ObjectMapper() örneğini başlattığınızda:

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

Bir nesneyi JSON dizesi olarak yazar yazmaz, güzel yazdırma varsayılan olarak etkinleştirilir:

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

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

Bunun sonucu:

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

POJO'lar ile:

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

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

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

Güzel yazdırma yaygın bir görüntüleme formatıysa, bu yaklaşım önemli ölçüde daha az ayrıntılıdır.

Spring Boot ile Pretty-Printing Jackson

El kitabı olmadan Spring Boot kullanıyorsanız ObjectMapper örnek oluşturulur ve temeldeki seri hale getiriciye güvenirseniz, indent_output bayrak true içinde application.properties Dosya:

spring.jackson.serialization.indent_output=true

Veya, içinde application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Bu ayarlar SerializationFeature.INDENT_OUTPUT baharda bayrak ObjectMapper örneği.

Sonuç

Bu kısa öğreticide, Jackson kullanarak bir String veya POJO'dan JSON'u nasıl güzel bir şekilde yazdırabileceğinize bir göz attık. Tek baskı değişikliklerini (yalnızca bir kez güzel baskı yapmak istediğinizde) araştırdık ve için küresel Jackson bayrağını belirledik. ObjectMapper. Son olarak, Jackson ile güzel yazdırmayı etkinleştirmek için Spring Boot özelliklerini değiştirmeye göz attık.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı