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.