Pretty-Printing JSON עם ג'קסון ב-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);

Pretty-Print 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 קלט! בעבודה עם POJOs, במקום לקרוא מקלט נתון, נבצע רק המרת אובייקט ל-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

לחלופין, אתה יכול לאפשר הדפסת יפה גלובלית, אם זו ההתנהגות הגלובלית העדיפה של ג'קסון עבור הפרויקט שלך. זה קל כמו השימוש ב- 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 ולמעשה ללמוד זה!

{
  "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 כדי לאפשר הדפסה יפה עם ג'קסון.

בול זמן:

עוד מ Stackabuse