Pretty-Printing JSON with Jackson σε Java και Spring Boot

Η 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.

Σφραγίδα ώρας:

Περισσότερα από Stackabuse