Práca s JSON v Groovy
1. Úvod
V tomto článku popíšeme a uvidíme príklady toho, ako pracovať s JSON v aplikácii Groovy.
Najskôr je potrebné uviesť do prevádzky príklady tohto článku, ktoré si musíme pripraviť pom.xml:
// ... org.codehaus.gmavenplus gmavenplus-plugin 1.6 // ... org.codehaus.groovy groovy-all 2.4.13
Najnovší plugin Maven nájdete tu a najnovšiu verziu groovy-všetko tu.
2. Parsovanie Groovy objektov na JSON
Konverzia objektov na JSON v Groovy je dosť jednoduchá, predpokladajme, že máme Účet trieda:
trieda Účet {ID reťazca BigDecimal hodnota Dátum vytvorenia at}
Ak chcete previesť inštanciu tejto triedy na JSON Reťazec, musíme použiť JsonOutput triedy a zavolajte statickú metódu toJson ():
Účet účtu = nový účet (id: '123', hodnota: 15.6, createdAt: new SimpleDateFormat ('MM / dd / yyyy'). Parse ('01/2018')) println JsonOutput.toJson (account)
Vo výsledku dostaneme analyzovaný JSON Reťazec:
{"value": 15.6, "createdAt": "2018-01-01T02: 00: 00 + 0000", "id": "123"}
2.1. Prispôsobenie výstupu JSON
Ako vidíme, výstup dátumu nie je taký, aký sme chceli. Z tohto dôvodu, počnúc verziou 2.5, balík groovy.json sa dodáva s vyhradenou sadou nástrojov.
Vďaka JsonGenerator triedy, môžeme definovať možnosti výstupu JSON:
JsonGenerator generator = new JsonGenerator.Options () .dateFormat ('MM / dd / yyyy') .excludeFieldsByName ('value') .build () println generator.toJson (účet)
Vo výsledku dostaneme formátovaný JSON bez vylúčeného hodnotového poľa a s naformátovaným dátumom:
{"createdAt": "01/01/2018", "id": "123"}
2.2. Formátovanie výstupu JSON
Pomocou vyššie uvedených metód sme videli, že výstup JSON bol vždy v jednom riadku a môže byť mätúci, ak sa musí zaoberať zložitejším objektom.
Náš výstup však môžeme naformátovať pomocou prettyPrint metóda:
Reťazec json = generator.toJson (účet) tlačiť JsonOutput.prettyPrint (json)
Dostaneme formátovaný JSON nižšie:
{"value": 15.6, "createdAt": "01/01/2018", "id": "123"}
3. Analýza JSON na Groovy objekty
Budeme používať triedu Groovy JsonSlurper previesť z JSON na Predmety.
Tiež s JsonSlurper máme kopu preťažených analyzovať metódy a niekoľko konkrétnych metód ako parseText, parseFile, a ďalšie.
Použijeme parseText analyzovať a String do an Trieda účtu:
def jsonSlurper = nový JsonSlurper () def account = jsonSlurper.parseText ('{"id": "123", "value": 15.6}') ako účet
Vo vyššie uvedenom kóde máme metódu, ktorá prijíma JSON String a vráti Účet objekt, ktorým môže byť akýkoľvek Groovy objekt.
Tiež môžeme analyzovať JSON String do a Mapa, volať to bez akéhokoľvek obsadenia a s dynamickým písaním Groovy môžeme mať to isté ako objekt.
3.1. Analýza vstupu JSON
Predvolená implementácia syntaktického analyzátora pre JsonSlurper je JsonParserType.CHAR_BUFFER, ale v niektorých prípadoch budeme musieť vyriešiť problém s analýzou.
Pozrime sa na príklad: daný JSON String s vlastnosťou dátumu, JsonSlurper nebude správne vytvárať Objekt, pretože sa pokúsi analyzovať dátum ako Reťazec:
def jsonSlurper = nový JsonSlurper () def account = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}') ako účet
Výsledkom bude, že vyššie uvedený kód vráti znak Účet objekt so všetkými vlastnosťami obsahujúcimi nulový hodnoty.
Na vyriešenie tohto problému môžeme použiť JsonParserType.INDEX_OVERLAY.
Vo výsledku sa bude čo najviac snažiť vyhnúť vytváraniu String alebo znakové polia:
def jsonSlurper = nový JsonSlurper (typ: JsonParserType.INDEX_OVERLAY) def account = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}') ako Účet
Teraz vyššie uvedený kód vráti znak Účet inštancie vhodne vytvorené.
3.2 Varianty syntaktického analyzátora
Tiež vo vnútri JsonParserType, máme niekoľko ďalších implementácií:
- JsonParserType.LAX umožní uvoľnenejšiu analýzu JSON s komentármi, reťazcami bez uvozoviek atď.
- JsonParserType.CHARACTER_SOURCE sa používa na analýzu veľkých súborov.
4. Záver
Veľa spracovania JSON v aplikácii Groovy sme pokryli niekoľkými jednoduchými príkladmi.
Pre viac informácií o groovy.json balíkových tried sa môžeme pozrieť na Groovy dokumentáciu.
Skontrolujte zdrojový kód tried použitých v tomto článku, ako aj niektoré testy jednotiek, v našom úložisku GitHub.