Werken met JSON in Groovy

1. Inleiding

In dit artikel gaan we voorbeelden beschrijven en zien van hoe u met JSON in een Groovy-applicatie kunt werken.

Om de voorbeelden van dit artikel in gebruik te nemen, moeten we eerst onze pom.xml:

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

De meest recente Maven-plug-in is hier te vinden en de nieuwste versie van het groovy-all hier.

2. Het parseren van Groovy Objects naar JSON

Objecten converteren naar JSON in Groovy is vrij eenvoudig, laten we aannemen dat we een Account klasse:

class Account {String id BigDecimal value Date createdAt}

Om een ‚Äč‚Äčinstantie van die klasse naar een JSON te converteren Draad, we moeten de JsonOutput class en maak een oproep naar de statische methode toJson ():

Account account = nieuw account (id: '123', waarde: 15.6, createdAt: new SimpleDateFormat ('MM / dd / jjjj'). Parse ('01 / 01/2018 ')) println JsonOutput.toJson (account)

Als gevolg hiervan krijgen we de geparseerde JSON Draad:

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

2.1. De JSON-uitvoer aanpassen

Zoals we kunnen zien, is de datuminvoer niet wat we wilden. Daartoe wordt vanaf versie 2.5 het pakket groovy.json wordt geleverd met een speciale set gereedschappen.

Met de JsonGenerator class, kunnen we opties definiëren voor de JSON-uitvoer:

JsonGenerator generator = nieuwe JsonGenerator.Options () .dateFormat ('MM / dd / jjjj') .excludeFieldsByName ('waarde') .build () println generator.toJson (account)

Als gevolg hiervan krijgen we de opgemaakte JSON zonder het waardeveld dat we hebben uitgesloten en met de opgemaakte datum:

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

2.2. De JSON-uitvoer formatteren

Met de bovenstaande methoden hebben we gezien dat de JSON-uitvoer altijd op één regel stond, en het kan verwarrend worden als er een complexer object moet worden afgehandeld.

We kunnen onze uitvoer echter formatteren met de prettyPrint methode:

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

En we krijgen de geformatteerde JSON-balg:

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

3. JSON parseren naar Groovy Objects

We gaan Groovy-les gebruiken JsonSlurper om te converteren van JSON naar Voorwerpen.

Ook met JsonSlurper we hebben een hoop overbelast ontleden methoden en een paar specifieke methoden zoals parseText, parseFile, en anderen.

We gebruiken de parseText om een Draad aan een Accountklasse:

def jsonSlurper = nieuwe JsonSlurper () def account = jsonSlurper.parseText ('{"id": "123", "value": 15.6}') als account

In de bovenstaande code hebben we een methode die een JSON ontvangt Draad en retourneert een Account object, dat elk Groovy-object kan zijn.

We kunnen ook een JSON parseren Draad naar een Kaart, noemen het zonder enige cast, en met de dynamische Groovy-typering, kunnen we hetzelfde hebben als het object.

3.1. JSON-invoer parseren

De standaard parser-implementatie voor JsonSlurper is JsonParserType.CHAR_BUFFER, maar in sommige gevallen moeten we een ontledingsprobleem oplossen.

Laten we hiervoor een voorbeeld bekijken: een JSON gegeven Draad met een datumeigenschap, JsonSlurper zal het object niet correct maken omdat het zal proberen de datum te parseren als Draad:

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

Als gevolg hiervan retourneert de bovenstaande code een Account object met alle eigenschappen met nul waarden.

Om dat probleem op te lossen, kunnen we de JsonParserType.INDEX_OVERLAY.

Als gevolg hiervan zal het zo hard mogelijk proberen om de creatie van Draad of char-arrays:

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

Nu zal de bovenstaande code een Account instantie op de juiste manier gemaakt.

3.2 Parservarianten

Ook binnen het JsonParserType, we hebben een aantal andere implementaties:

  • JsonParserType.LAX zal een meer ontspannen JSON-parsing mogelijk maken, met opmerkingen, geen aanhalingstekens, enz.
  • JsonParserType.CHARACTER_SOURCE wordt gebruikt voor het parseren van grote bestanden.

4. Conclusie

We hebben veel van de JSON-verwerking in een Groovy-applicatie behandeld met een paar eenvoudige voorbeelden.

Voor meer informatie over het groovy.json pakketlessen kunnen we een kijkje nemen in de Groovy-documentatie.

Controleer de broncode van de klassen die in dit artikel worden gebruikt, evenals enkele eenheidstests, in onze GitHub-repository.