Együttműködés a JSON-nal a Groovy-ban

1. Bemutatkozás

Ebben a cikkben leírjuk és megnézzük a JSON-mal való együttműködés példáját egy Groovy alkalmazásban.

Először is, hogy a cikk példái működésbe léphessenek, be kell állítanunk a cikkünket pom.xml:

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

A legfrissebb Maven plugin itt található, és a nagyszerű itt.

2. A Groovy objektumok elemzése a JSON számára

Az Groovy-ban az objektumok JSON-ba konvertálása nagyon egyszerű, tegyük fel, hogy van egy Számla osztály:

osztály Fiók {String id BigDecimal érték Dátum létrehozási dátum}

Az osztály egy példányának konvertálása JSON-vá Húr, használnunk kell a JsonOutput osztály és hívjon a statikus módszerre toJson ():

Számlafiók = új számla (id: '123', érték: 15,6, luotettAt: új SimpleDateFormat ('HH / nn / éééé'). Elemzés ('01/01/2018')) println JsonOutput.toJson (fiók)

Ennek eredményeként megkapjuk az elemzett JSON-t Húr:

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

2.1. A JSON kimenet testreszabása

Mint láthatjuk, a dátum kimenet nem az, amit szerettünk volna. Erre a célra a csomag 2.5-ös verziójával kezdve groovy.json dedikált eszközkészlettel érkezik.

A ... val JsonGenerator osztályban meghatározhatjuk a JSON kimenet opcióit:

JsonGenerator generator = new JsonGenerator.Options () .dateFormat ('MM / dd / yyyy') .excludeFieldsByName ('value') .build () println generator.toJson (account)

Ennek eredményeként megkapjuk a formázott JSON-t a kizárt értékmező és a formázott dátum nélkül:

{"createdAt": "2018.01.01.", "id": "123"}

2.2. A JSON kimenet formázása

A fenti módszerekkel láttuk, hogy a JSON kimenet mindig egyetlen sorban volt, és zavarossá válhat, ha egy összetettebb objektummal kell foglalkozni.

A kimenetünket azonban formázhatjuk a prettyPrint módszer:

Karakterlánc json = generator.toJson (fiók) println JsonOutput.prettyPrint (json)

És megkapjuk a formázott JSON ordítást:

{"value": 15.6, "createdAt": "2018.01.01.", "id": "123"}

3. A JSON elemzése a Groovy Objects számára

A Groovy osztályt fogjuk használni JsonSlurper konvertálni JSON-ról Tárgyak.

Továbbá azzal JsonSlurper van egy rakás túlterheltünk elemzés módszerek és néhány speciális módszer, például parseText, parseFile, és mások.

Használjuk a parseText elemezni a Húr egy Számlaosztály:

def jsonSlurper = new JsonSlurper () def account = jsonSlurper.parseText ('{"id": "123", "value": 15.6}') as Account

A fenti kódban van egy módszerünk, amely JSON-t kap Húr és visszatér egy Számla objektum, amely bármilyen Groovy objektum lehet.

Emellett elemezhetünk egy JSON-t Húr a Térkép, szereposztás nélkül hívjuk, és a Groovy dinamikus gépeléssel megegyezhetünk az objektummal.

3.1. A JSON bemenet elemzése

Az alapértelmezett elemző implementáció a JsonSlurper van JsonParserType.CHAR_BUFFER, de bizonyos esetekben egy elemzési problémával kell megküzdenünk.

Nézzünk erre egy példát: adott egy JSON Húr dátum tulajdonsággal, JsonSlurper nem fogja helyesen létrehozni az Objektumot, mert megpróbálja a dátumot elemezni Húr:

def jsonSlurper = new JsonSlurper () def account = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}') mint fiók

Ennek eredményeként a fenti kód egy Számla objektum minden tulajdonságot tartalmazó nulla értékek.

A probléma megoldásához használhatjuk a JsonParserType.INDEX_OVERLAY.

Ennek eredményeként a lehető legnagyobb erőfeszítéseket fogja tenni annak elkerülése érdekében Húr vagy char tömbök:

def jsonSlurper = új JsonSlurper (típus: JsonParserType.INDEX_OVERLAY) def account = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}' ') Számla

Most a fenti kód egy Számla megfelelően létrehozott példány.

3.2 Elemzőváltozatok

Továbbá, a JsonParserType, van néhány más megvalósításunk:

  • JsonParserType.LAX lehetővé teszi a nyugodtabb JSON elemzést, megjegyzésekkel, idézőjelek nélkül stb.
  • JsonParserType.CHARACTER_SOURCE nagy fájlok elemzésére szolgál.

4. Következtetés

Számos JSON-feldolgozást ismertettünk egy Groovy alkalmazásban, néhány egyszerű példával.

További információ a groovy.json csomag osztályokból megnézhetjük a Groovy dokumentációt.

Ellenőrizze a cikkben használt osztályok forráskódját, valamint néhány egységtesztet a GitHub adattárunkban.


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