Η Jackson είναι μια από τις πιο κοινές βιβλιοθήκες για εργασία με σειριοποίηση και αποσειροποίηση σε Java και Spring Boot, που χρησιμοποιείται κυρίως για ανάλυση και μετατροπή μεταξύ POJO και JSON.
Ωστόσο, εάν έχετε εργαστεί με τον Jackson, θα παρατηρήσετε μια σαφή έλλειψη όμορφης εκτύπωσης από προεπιλογή:
{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);
Pretty-Print JSON with 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-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
}
Παγκόσμια ρύθμιση Pretty-Print
Εναλλακτικά, μπορείτε να ενεργοποιήσετε την καθολική όμορφη εκτύπωση, εάν αυτή είναι η προτιμώμενη παγκόσμια συμπεριφορά του Jackson για το έργο σας. Αυτό είναι τόσο εύκολο όσο η χρήση του 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, με βέλτιστες πρακτικές, πρότυπα αποδεκτά από τον κλάδο και συμπεριλαμβανόμενο φύλλο εξαπάτησης. Σταματήστε τις εντολές του Git στο Google και πραγματικά μαθαίνουν το!
{
"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 χρησιμοποιώντας το Jackson. Εξερευνήσαμε τις αλλαγές μιας εκτύπωσης (όταν θέλετε να εκτυπώσετε όμορφα μόνο μία φορά) και ορίσαμε την παγκόσμια σημαία Jackson για ObjectMapper
. Τέλος, ρίξαμε μια ματιά στην αλλαγή των ιδιοτήτων Spring Boot για την ενεργοποίηση της όμορφης εκτύπωσης με το Jackson.