طباعة جميلة JSON مع Jackson في Java و Spring Boot

جاكسون هي واحدة من المكتبات الأكثر شيوعًا للعمل مع التسلسل وإلغاء التسلسل في Java و Spring Boot ، وتستخدم بشكل أساسي للتحليل والتحويل بين POJOs و JSON.

رغم ذلك ، إذا كنت قد عملت مع جاكسون ، فستلاحظ نقصًا واضحًا في الطباعة الجميلة افتراضيًا:

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

في هذا البرنامج التعليمي القصير ، ستتعلم كيفية طباعة JSON بشكل جميل باستخدام Jackson في Java القياسي وباستخدام 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;
    }
    

لنبدأ إنشاء ملف 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 مع جاكسون مرة واحدة

إذا كنت ترغب في الطباعة الجميلة مرة واحدة ، في مكالمة واحدة ، بدلاً من تعيين علامة الطباعة العالمية - يمكنك ببساطة استخدام 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 للإدخال! عند العمل مع POJOs ، بدلاً من القراءة من إدخال معين ، سنقوم فقط بإجراء تحويل Object-to-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"
}

مع POJOs:

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

تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling 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 من سلسلة أو POJO باستخدام جاكسون. لقد استكشفنا تغييرات الطباعة الفردية (عندما تريد فقط الطباعة الجميلة مرة واحدة) وتعيين علامة جاكسون العالمية لـ ObjectMapper. أخيرًا ، ألقينا نظرة على تغيير خصائص Spring Boot لتمكين الطباعة الجميلة باستخدام Jackson.

الطابع الزمني:

اكثر من ستاكابوز