כיצד לעבד את YAML עם ג'קסון

1. הקדמה

במדריך קצר זה, אנו נלמד כיצד להשתמש בג'קסון לקריאה וכתיבה של קבצי YAML.

לאחר שנעבור על מבנה הדוגמה שלנו, נשתמש ב- ObjectMapper לקרוא קובץ YAML לאובייקט Java וגם לכתוב אובייקט לקובץ.

2. תלות

בואו נוסיף את התלות בפורמט הנתונים של ג'קסון YAML:

 com.fasterxml.jackson.dataformat jackson-dataformat-yaml 2.11.1 

אנחנו תמיד יכולים למצוא את הגרסה העדכנית ביותר של תלות זו ב- Maven Central.

אובייקט Java שלנו משתמש ב- LocalDateאז בואו גם להוסיף תלות לסוג הנתונים JSR-310:

 com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.11.1 

שוב, אנו יכולים לחפש את הגרסה האחרונה שלה ב- Maven Central.

3. מבנה נתונים ואובייקט

עם התלות שלנו בריבוע משם, נפנה כעת לקובץ הקלט ולשיעורי Java בהם נשתמש.

בואו נסתכל תחילה על הקובץ שנקרא בו:

הזמנה מספר: A001 תאריך: 2019-04-17 לקוח שם: לקוח, הזמנת ג'ו קווים: - פריט: מספר 9 גלגלי שיניים: 12 יחידות מחיר: 1.23 - פריט: יישומון (10 מ"מ) כמות: 4 יחידות מחיר: 3.45

ואז, בואו נגדיר את להזמין מעמד:

סדר ציבורי ציבורי {פרטי סדר מחרוזת לא; תאריך LocalDate פרטי; פרטי מחרוזת customerName; פרטי רשימת סדרים // קונסטרוקטורים, גטרים, סטרים וטרינג}

לבסוף, בואו ניצור את שלנו OrderLine מעמד:

מחלקה ציבורית OrderLine {פריט מחרוזת פרטי; כמות אינטנס פרטית; יחידת BigDecimal פרטית; // קונסטרוקטורים, גטרים, סטרים וטרינג}

4. קריאת YAML

אנחנו נשתמש בזה של ג'קסון ObjectMapper לקרוא את קובץ YAML שלנו ל- להזמין אובייקט, אז בואו נקבע את זה עכשיו:

mapper = ObjectMapper חדש (YAMLFactory חדש ());

עלינו להשתמש ב- findAndRegisterModules שיטה כדי שג'קסון יטפל ב תַאֲרִיך כמו שצריך:

mapper.findAndRegisterModules ();

ברגע שיש לנו את שלנו ObjectMapper מוגדר, אנחנו פשוט משתמשים readValue:

סדר הזמנה = mapper.readValue (קובץ חדש ("src / main / resources / orderInput.yaml"), Order.class);

נגלה שזה שלנו להזמין האובייקט מאוכלס מהקובץ, כולל רשימת OrderLine.

5. כתיבת YAML

אנחנו גם הולכים להשתמש ObjectMapper לכתוב להזמין החוצה לקובץ. אבל ראשית, בואו נוסיף לו תצורה כלשהי:

mapper.disable (SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

הוספת השורה הזו אומרת לג'קסון פשוט כתוב את התאריך שלנו כ- חוּט במקום חלקים מספריים בודדים.

כברירת מחדל, הקובץ שלנו יתחיל בשלושה מקפים. זה תקף לחלוטין לפורמט YAML, אבל אנו יכולים לכבות אותו על ידי השבתת התכונה על YAMLFactory:

mapper = ObjectMapper חדש (YAMLFactory חדש (). השבת (Feature.WRITE_DOC_START_MARKER));

עם ההגדרה הנוספת הזו מהדרך, בואו ליצור להזמין:

רשימת שורות = ArrayList חדש (); lines.add (OrderLine חדש ("חוט נחושת (200ft)", 1, BigDecimal חדש (50.67) .setScale (2, RoundingMode.HALF_UP))); lines.add (OrderLine חדש ("Washers (1/4 \") ", 24, BigDecimal חדש (.15) .setScale (2, RoundingMode.HALF_UP)); סדר הזמנה = הזמנה חדשה (" B-9910 ", LocalDate.parse ("18/04/2019", DateTimeFormatter.ISO_DATE), "לקוח, ג'יין", שורות);

בואו נכתוב את ההזמנה שלנו באמצעות writeValue:

mapper.writeValue (קובץ חדש ("src / main / resources / orderOutput.yaml"), סדר);

כשאנחנו מסתכלים אל orderOutput.yaml, זה צריך להיראות דומה ל:

הזמנה מספר: "B-9910" תאריך: "2019-04-18" לקוח שם: "לקוח, ג'יין" הזמנת קווים: - פריט: "חוט נחושת (200 רגל)" כמות: 1 יחידה מחיר: 50.67 - פריט: "מנקי (1/4 \ ")" כמות: 24 יחידה מחיר: 0.15

6. מסקנה

במדריך מהיר זה למדנו כיצד לקרוא ולכתוב YAML אל קבצים וממנה באמצעות ספריית ג'קסון. בדקנו גם כמה פריטי תצורה שיעזרו לנו לקבל את הנתונים שלנו כמו שאנחנו רוצים.

קוד הדוגמה המלא הסתיים ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found