Jobber med JSON i Groovy

1. Introduksjon

I denne artikkelen skal vi beskrive og se eksempler på hvordan du kan jobbe med JSON i en Groovy-applikasjon.

Først av alt, for å få eksemplene på denne artikkelen i gang, må vi sette opp vår pom.xml:

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

Den siste Maven-pluginen finner du her og den siste versjonen av groovy-all her.

2. Analyse av groovy objekter til JSON

Å konvertere objekter til JSON i Groovy er ganske enkelt, la oss anta at vi har en Regnskap klasse:

class Account {String id BigDecimal value Date createdAt}

Å konvertere en forekomst av den klassen til en JSON Streng, vi trenger å bruke JsonOutput klasse og ringe til den statiske metoden toJson ():

Kontokonto = ny konto (id: '123', verdi: 15,6, opprettetAt: ny SimpleDateFormat ('MM / dd / åååå'). Analyse ('01 / 01/2018 ')) println JsonOutput.toJson (konto)

Som et resultat får vi den analyserte JSON Streng:

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

2.1. Tilpasse JSON-utgangen

Som vi kan se, er datoutgangen ikke det vi ønsket. For det formålet, startende med versjon 2.5, pakken groovy.json leveres med et dedikert sett med verktøy.

Med JsonGenerator klasse, kan vi definere alternativer til JSON-utgangen:

JsonGenerator generator = ny JsonGenerator.Options () .dateFormat ('MM / dd / åååå') .excludeFieldsByName ('verdi') .build () println generator.toJson (konto)

Som et resultat får vi den formaterte JSON uten verdifeltet vi ekskluderte og med den formaterte datoen:

{"createdAt": "01/01/2018", "id": "123"}

2.2. Formatering av JSON-utdata

Med metodene ovenfor så vi at JSON-utgangen alltid var i en enkelt linje, og det kan bli forvirrende hvis et mer komplekst objekt må håndteres.

Imidlertid kan vi formatere utdataene våre ved hjelp av prettyPrint metode:

String json = generator.toJson (konto) println JsonOutput.prettyPrint (json)

Og vi får den formaterte JSON-bellen:

{"value": 15.6, "createdAt": "01/01/2018", "id": "123"}

3. Analyse av JSON til Groovy Objects

Vi skal bruke Groovy-klassen JsonSlurper å konvertere fra JSON til Objekter.

Også med JsonSlurper vi har en haug med overbelastet analysere metoder og noen få spesifikke metoder som parseText, parseFile, og andre.

Vi bruker parseText å analysere a String til en Kontoklasse:

def jsonSlurper = ny JsonSlurper () def-konto = jsonSlurper.parseText ('{"id": "123", "value": 15.6}') som konto

I koden ovenfor har vi en metode som mottar en JSON String og returnerer en Regnskap objekt, som kan være et hvilket som helst Groovy-objekt.

Vi kan også analysere en JSON String til en Kart, kaller det uten rollebesetning, og med Groovy dynamisk skriving kan vi ha det samme som objektet.

3.1. Analyse av JSON-inngang

Standard parserimplementering for JsonSlurper er JsonParserType.CHAR_BUFFER, men i noen tilfeller må vi håndtere et analyseproblem.

La oss se på et eksempel på dette: gitt en JSON String med en dato eiendom, JsonSlurper vil ikke opprette objektet riktig fordi det vil prøve å analysere datoen som Streng:

def jsonSlurper = ny JsonSlurper () def account = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}') som konto

Som et resultat vil koden ovenfor returnere en Regnskap objekt med alle eiendommer som inneholder null verdier.

For å løse dette problemet kan vi bruke JsonParserType.INDEX_OVERLAY.

Som et resultat vil den prøve så hardt som mulig å unngå å lage String eller røye arrays:

def jsonSlurper = ny JsonSlurper (type: JsonParserType.INDEX_OVERLAY) def account = jsonSlurper.parseText ('{"id": "123", "createdAt": "2018-01-01T02: 00: 00 + 0000"}') Regnskap

Nå vil koden ovenfor returnere en Regnskap forekomst riktig opprettet.

3.2 Parser-varianter

Også inne i JsonParserType, vi har noen andre implementeringer:

  • JsonParserType.LAX vil tillate en mer avslappet JSON-analyse, med kommentarer, ingen tilbudstrenger, etc.
  • JsonParserType.CHARACTER_SOURCE brukes til analyse av store filer.

4. Konklusjon

Vi har dekket mye av JSON-behandlingen i en Groovy-applikasjon med et par enkle eksempler.

For mer informasjon om groovy.json pakke klasser kan vi ta en titt på Groovy Documentation.

Sjekk kildekoden til klassene som brukes i denne artikkelen, samt noen enhetstester, i GitHub-depotet vårt.


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