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.