Suradnja s JSON-om u Groovyju

1. Uvod

U ovom ćemo članku opisati i vidjeti primjere rada s JSON-om u Groovy aplikaciji.

Prije svega, da bismo pokrenuli i pokrenuli primjere ovog članka, moramo postaviti svoj pom.xml:

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

Najnoviji dodatak Maven možete pronaći ovdje i najnoviju verziju groovy-all ovdje.

2. Raščlanjivanje Groovy objekata prema JSON-u

Pretvaranje objekata u JSON u Groovyju prilično je jednostavno, pretpostavimo da imamo Račun razred:

klasa Račun {String id BigDecimal value Date createdAt}

Da pretvorite instancu te klase u JSON Niz, trebamo koristiti JsonOutput klase i uputiti poziv statičkoj metodi toJson ():

Račun računa = novi račun (id: '123', vrijednost: 15,6, kreiranAt: new SimpleDateFormat ('MM / dd / yyyy'). Parse ('01 / 01/2018 ')) println JsonOutput.toJson (account)

Kao rezultat, dobit ćemo raščlanjeni JSON Niz:

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

2.1. Prilagođavanje JSON izlaza

Kao što vidimo, datumski izlaz nije ono što smo željeli. U tu svrhu, počevši od verzije 2.5, paket groovy.json dolazi s namjenskim setom alata.

Uz JsonGenerator klase, možemo definirati opcije za JSON izlaz:

JsonGenerator generator = novi JsonGenerator.Options () .dateFormat ('MM / dd / yyyy') .excludeFieldsByName ('value') .build () println generator.toJson (račun)

Kao rezultat, dobit ćemo formatirani JSON bez polja vrijednosti koje smo izuzeli i s formatiranim datumom:

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

2.2. Formatiranje JSON izlaza

S gornjim metodama vidjeli smo da je izlaz JSON-a uvijek u jednom retku i može postati zbunjujuće ako treba riješiti složeniji objekt.

Međutim, svoj izlaz možemo oblikovati pomoću prettyPrint metoda:

Niz json = generator.toJson (račun) println JsonOutput.prettyPrint (json)

I dolazimo do formatiranog JSON-a ispod:

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

3. Raščlanjivanje JSON-a na Groovy Objekte

Koristit ćemo klasu Groovy JsonSlurper pretvoriti iz JSON u Predmeti.

Također, sa JsonSlurper imamo hrpu preopterećenih raščlaniti metode i nekoliko specifičnih metoda poput parseText, raščlaniti datoteku, i drugi.

Koristit ćemo parseText raščlaniti a Niz do an Klasa računa:

def jsonSlurper = novi JsonSlurper () def account = jsonSlurper.parseText ('{"id": "123", "value": 15.6}') kao račun

U gornjem kodu imamo metodu koja prima JSON Niz i vraća an Račun objekt, koji može biti bilo koji Groovy objekt.

Također, možemo raščlaniti JSON Niz do a Karta, pozivajući ga bez ikakve glumačke postavke, a uz Groovyjevo dinamičko tipkanje možemo dobiti isto što i objekt.

3.1. Raščlanjivanje JSON ulaza

Zadana implementacija parsera za JsonSlurper je JsonParserType.CHAR_BUFFER, ali u nekim ćemo se slučajevima morati nositi s problemom raščlanjivanja.

Pogledajmo primjer za to: s obzirom na JSON Niz sa svojstvom datuma, JsonSlurper neće pravilno stvoriti objekt jer će pokušati datum raščlaniti kao Niz:

def jsonSlurper = novi JsonSlurper () def account = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}') kao račun

Kao rezultat, gornji kôd vratit će Račun objekt sa svim svojstvima koja sadrže null vrijednosti.

Da bismo riješili taj problem, možemo koristiti JsonParserType.INDEX_OVERLAY.

Kao rezultat toga, pokušat će što je više moguće izbjeći stvaranje Niz ili nizovi char:

def jsonSlurper = novi JsonSlurper (tip: JsonParserType.INDEX_OVERLAY) def account = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}') kao Račun

Sada će gornji kod vratiti znak Račun primjerak prikladno stvoren.

3.2 Varijacije raščlanjivača

Također, unutar JsonParserType, imamo neke druge implementacije:

  • JsonParserType.LAX omogućit će opuštenije raščlanjivanje JSON-a, s komentarima, bez citata, itd.
  • JsonParserType.CHARACTER_SOURCE koristi se za raščlanjivanje velikih datoteka.

4. Zaključak

Dosta smo obrade JSON-a obradili u Groovy aplikaciji s nekoliko jednostavnih primjera.

Za više informacija o groovy.json klase paketa možemo pogledati Groovy dokumentaciju.

Provjerite izvorni kod klasa korištenih u ovom članku, kao i neke jedinične testove, u našem GitHub spremištu.