עבודה עם JSON בגרובי

1. הקדמה

במאמר זה אנו מתארים ונראה דוגמאות כיצד לעבוד עם JSON ביישום Groovy.

קודם כל, כדי להפעיל את הדוגמאות של מאמר זה, עלינו להגדיר את שלנו pom.xml:

  // ... org.codehaus.gmavenplus gmavenplus-plugin 1.6 // ... org.codehaus.groovy groovy-all 2.4.13 

את התוסף העדכני ביותר של Maven תוכלו למצוא כאן ואת הגרסה האחרונה של ה- גרובי-הכל פה.

2. ניתוח אובייקטים גרוביים ל- JSON

המרת אובייקטים ל- JSON בגרובי היא די פשוטה, נניח שיש לנו חֶשְׁבּוֹן מעמד:

class class {מזהה מחרוזת ערך BigDecimal תאריך יצירה Att}

להמיר מופע של אותה מחלקה ל- JSON חוּט, אנחנו צריכים להשתמש ב- JsonOutput בכיתה והתקשר לשיטה הסטטית toJson ():

חשבון חשבון = חשבון חדש (מזהה: '123', ערך: 15.6, נוצר ב: חדש SimpleDateFormat ('MM / dd / yyyy'). ניתוח ('01 / 01/2018 ')) println JsonOutput.toJson (חשבון)

כתוצאה מכך נקבל את ה- JSON המנותח חוּט:

{"value": 15.6, "createdAt": "01-01-2018T02: 00: 00 + 0000", "id": "123"}

2.1. התאמה אישית של פלט JSON

כפי שאנו רואים, תפוקת התאריך אינה מה שרצינו. לשם כך, החל מגרסת 2.5, החבילה groovy.json מגיע עם סט כלים ייעודי.

עם ה JsonGenerator בכיתה, אנו יכולים להגדיר אפשרויות לפלט JSON:

מחולל JsonGenerator = חדש JsonGenerator.Options () .dateFormat ('MM / dd / yyyy') .excludeFieldsByName ('value') .build () println generator.toJson (חשבון)

כתוצאה מכך נקבל את ה- JSON המעוצב ללא שדה הערך שאינו הכללנו ועם התאריך המעוצב:

{"createdAt": "01/01/2018", "id": "123"}

2.2. עיצוב פלט JSON

בשיטות לעיל ראינו שפלט ה- JSON תמיד נמצא בשורה אחת, וזה יכול להיות מבלבל אם צריך להתמודד עם אובייקט מורכב יותר.

עם זאת, אנו יכולים לעצב את הפלט שלנו באמצעות ה- prettyPrint שיטה:

מחרוזת json = generator.toJson (חשבון) println JsonOutput.prettyPrint (json)

ואנחנו מקבלים את השעון JSON המעוצב:

{"value": 15.6, "createdAt": "01/01/2018", "id": "123"}

3. ניתוח JSON לאובייקטים גרוביים

אנחנו הולכים להשתמש בשיעור גרובי JsonSlurper להמיר מ JSON ל חפצים.

גם עם JsonSlurper יש לנו חבורה של עומסים לְנַתֵחַ שיטות וכמה שיטות ספציפיות כמו parseText, parseFile, ואחרים.

נשתמש ב- parseText לנתח א חוּט ל מחלקת חשבון:

def jsonSlurper = חדש JsonSlurper () חשבון def = jsonSlurper.parseText ('{"id": "123", "value": 15.6}') כחשבון

בקוד הנ"ל יש לנו שיטה שמקבלת JSON חוּט ומחזיר an חֶשְׁבּוֹן אובייקט, שיכול להיות כל אובייקט גרובי.

כמו כן, אנו יכולים לנתח JSON חוּט אל א מַפָּה, קוראים לזה בלי שום צוות, ועם ההקלדה הדינמית של גרובי, אנחנו יכולים לקבל את אותו הדבר כמו האובייקט.

3.1. ניתוח קלט JSON

יישום המנתח המוגדר כברירת מחדל עבור JsonSlurper הוא JsonParserType.CHAR_BUFFERאך במקרים מסוימים נצטרך להתמודד עם בעיית ניתוח.

בואו נסתכל על דוגמא לכך: ניתן JSON חוּט עם נכס תאריך, JsonSlurper לא ייצור נכון את האובייקט מכיוון שהוא ינסה לנתח את התאריך כ- חוּט:

def jsonSlurper = JsonSlurper חדש () חשבון def = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}' כחשבון

כתוצאה מכך, הקוד לעיל יחזיר חֶשְׁבּוֹן אובייקט עם כל המאפיינים המכילים ריק ערכים.

כדי לפתור בעיה זו, אנו יכולים להשתמש ב- JsonParserType.INDEX_OVERLAY.

כתוצאה מכך, הוא ינסה ככל האפשר להימנע מיצירת חוּט או מערכי שריפה:

def jsonSlurper = JsonSlurper חדש (סוג: JsonParserType.INDEX_OVERLAY) def account = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}') כ חֶשְׁבּוֹן

כעת, הקוד לעיל יחזיר חֶשְׁבּוֹן מופע שנוצר כראוי.

3.2 גרסאות ניתוח

כמו כן, בתוך JsonParserType, יש לנו כמה יישומים אחרים:

  • JsonParserType.LAX יאפשר ניתוח JSON רגוע יותר, עם הערות, ללא מחרוזות הצעת מחיר וכו '.
  • JsonParserType.CHARACTER_SOURCE משמש לניתוח קבצים גדול.

4. מסקנה

סקרנו הרבה מעיבוד JSON ביישום Groovy עם כמה דוגמאות פשוטות.

למידע נוסף אודות groovy.json בשיעורי חבילה נוכל להסתכל בתיעוד גרובי.

בדוק את קוד המקור של הכיתות המשמשות במאמר זה, כמו גם כמה מבחני יחידות במאגר GitHub שלנו.


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