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.


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