چاپ زیبا JSON با جکسون در جاوا و Spring Boot

جکسون یکی از رایج‌ترین کتابخانه‌ها برای کار با سریال‌سازی و سریال‌زدایی در جاوا و Spring Boot است که عمدتاً برای تجزیه و تبدیل بین POJO و JSON استفاده می‌شود.

اگرچه، اگر با جکسون کار کرده باشید، به طور پیش‌فرض متوجه کمبود مشخصی از چاپ زیبا خواهید شد:

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

در این آموزش کوتاه، نحوه چاپ زیبای JSON با جکسون در جاوا استاندارد و با 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);

چاپ زیبای 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 به 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
}

تنظیم جهانی زیبای چاپ

از طرف دیگر، اگر این رفتار جهانی ترجیح داده شده جکسون برای پروژه شما باشد، می توانید چاپ زیبای جهانی را فعال کنید. این به آسانی استفاده از 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 را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!

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

اگر چاپ زیبا یک قالب نمایش معمولی باشد، این رویکرد به طور قابل توجهی کمتر پرمخاطب است.

جکسون زیبای چاپی با چکمه فنری

اگر از Spring Boot بدون دفترچه راهنما استفاده می کنید ObjectMapper به عنوان مثال در حال ایجاد و تکیه بر سریال ساز اساسی، می توانید آن را تنظیم کنید indent_output پرچم به true در application.properties فایل:

spring.jackson.serialization.indent_output=true

یا ، در application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

این را تنظیم می کند SerializationFeature.INDENT_OUTPUT پرچم در بهار ObjectMapper نمونه.

نتیجه

در این آموزش کوتاه، نگاهی انداخته‌ایم به این که چگونه می‌توانید با استفاده از جکسون، JSON را از String یا POJO به زیبایی چاپ کنید. ما تغییرات تک چاپی را بررسی کرده‌ایم (زمانی که می‌خواهید فقط یک بار چاپ زیبا داشته باشید) و پرچم جهانی جکسون را برای ObjectMapper. در نهایت، ما نگاهی به تغییر ویژگی های Spring Boot برای فعال کردن چاپ زیبا با جکسون انداختیم.

تمبر زمان:

بیشتر از Stackabuse