Arbejder med JSON i Groovy

1. Introduktion

I denne artikel vil vi beskrive og se eksempler på, hvordan man arbejder med JSON i en Groovy-applikation.

Først og fremmest skal vi konfigurere vores for at få eksemplerne på denne artikel i gang pom.xml:

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

Det seneste Maven-plugin kan findes her og den nyeste version af groovy-all her.

2. Analyse af groovy objekter til JSON

At konvertere objekter til JSON i Groovy er ret simpelt, lad os antage, at vi har en Konto klasse:

klasse Konto {String id BigDecimal værdi Dato oprettetAt}

At konvertere en forekomst af denne klasse til en JSON Snor, vi er nødt til at bruge JsonOutput klasse og ring til den statiske metode toJson ():

Kontokonto = ny konto (id: '123', værdi: 15.6, oprettetAt: ny SimpleDateFormat ('MM / dd / åååå'). Parse ('01 / 01/2018 ')) println JsonOutput.toJson (konto)

Som et resultat får vi den analyserede JSON Snor:

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

2.1. Tilpasning af JSON-output

Som vi kan se, er datoutgangen ikke det, vi ønskede. Til dette formål, startende med version 2.5, pakken groovy.json leveres med et dedikeret sæt værktøjer.

Med JsonGenerator klasse kan vi definere indstillinger til JSON-output:

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

Som et resultat får vi den formaterede JSON uden det værdifelt, vi udelukkede, og med den formaterede dato:

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

2.2. Formatering af JSON-output

Med ovenstående metoder så vi, at JSON-output altid var i en enkelt linje, og det kan blive forvirrende, hvis et mere komplekst objekt skal behandles.

Vi kan dog formatere vores output ved hjælp af prettyPrint metode:

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

Og vi får den formaterede JSON-bælge:

{"værdi": 15.6, "createdAt": "01/01/2018", "id": "123"}

3. Parsing af JSON til groovy objekter

Vi bruger Groovy-klassen JsonSlurper at konvertere fra JSON til Objekter.

Også med JsonSlurper vi har en masse overbelastede parse metoder og et par specifikke metoder som parseText, parseFile, og andre.

Vi bruger parseText at analysere a Snor til en Kontoklasse:

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

I ovenstående kode har vi en metode, der modtager en JSON Snor og returnerer en Konto objekt, som kan være et hvilket som helst Groovy-objekt.

Vi kan også analysere en JSON Snor til en Kort, kalder det uden nogen rollebesætning, og med den dynamiske typografi Groovy kan vi have det samme som objektet.

3.1. Parsing af JSON-input

Standard parserimplementering for JsonSlurper er JsonParserType.CHAR_BUFFER, men i nogle tilfælde skal vi håndtere et analyseproblem.

Lad os se på et eksempel på dette: givet en JSON Snor med en dato ejendom, JsonSlurper opretter ikke objektet korrekt, fordi det forsøger at analysere datoen som Snor:

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

Som et resultat returnerer koden ovenfor en Konto objekt med alle egenskaber indeholdende nul værdier.

For at løse dette problem kan vi bruge JsonParserType.INDEX_OVERLAY.

Som et resultat vil det prøve så hårdt som muligt at undgå oprettelse af Snor eller char arrays:

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

Nu vil koden ovenfor returnere en Konto instans passende oprettet.

3.2 Parservarianter

Også inde i JsonParserType, vi har nogle andre implementeringer:

  • JsonParserType.LAX vil muliggøre en mere afslappet JSON-parsing med kommentarer, ingen citatstrenge osv.
  • JsonParserType.CHARACTER_SOURCE bruges til parsing af store filer.

4. Konklusion

Vi har dækket meget af JSON-behandlingen i en Groovy-applikation med et par enkle eksempler.

For mere information om groovy.json pakke klasser kan vi se på Groovy Documentation.

Tjek kildekoden til de klasser, der er brugt i denne artikel, samt nogle enhedstest i vores GitHub-lager.


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