جاكسون هي واحدة من المكتبات الأكثر شيوعًا للعمل مع التسلسل وإلغاء التسلسل في 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.