Arbeiten mit JSON in Groovy

1. Einleitung

In diesem Artikel werden Beispiele für die Arbeit mit JSON in einer Groovy-Anwendung beschrieben und gezeigt.

Um die Beispiele für diesen Artikel zum Laufen zu bringen, müssen wir zunächst unsere Datei pom.xml einrichten :

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

Das neueste Maven-Plugin finden Sie hier und die neueste Version des Groovy-All hier.

2. Analysieren von Groovy-Objekten in JSON

Das Konvertieren von Objekten in JSON in Groovy ist ziemlich einfach. Nehmen wir an, wir haben eine Account- Klasse:

class Account { String id BigDecimal value Date createdAt }

Um eine Instanz dieser Klasse in einen JSON- String zu konvertieren , müssen Sie die JsonOutput- Klasse verwenden und die statische Methode toJson () aufrufen:

Account account = new Account( id: '123', value: 15.6, createdAt: new SimpleDateFormat('MM/dd/yyyy').parse('01/01/2018') ) println JsonOutput.toJson(account)

Als Ergebnis erhalten wir den analysierten JSON- String:

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

2.1. Anpassen der JSON-Ausgabe

Wie wir sehen können, ist die Datumsausgabe nicht das, was wir wollten. Zu diesem Zweck enthält das Paket groovy.json ab Version 2.5 einen speziellen Satz von Tools.

Mit der JsonGenerator- Klasse können wir Optionen für die JSON-Ausgabe definieren:

JsonGenerator generator = new JsonGenerator.Options() .dateFormat('MM/dd/yyyy') .excludeFieldsByName('value') .build() println generator.toJson(account)

Als Ergebnis erhalten wir den formatierten JSON ohne das ausgeschlossene Wertefeld und mit dem formatierten Datum:

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

2.2. Formatieren der JSON-Ausgabe

Mit den obigen Methoden haben wir gesehen, dass die JSON-Ausgabe immer in einer einzelnen Zeile stand und es verwirrend werden kann, wenn ein komplexeres Objekt behandelt werden muss.

Wir können unsere Ausgabe jedoch mit der Methode prettyPrint formatieren :

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

Und wir bekommen den formatierten JSON-Balg:

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

3. Analysieren von JSON auf groovige Objekte

Wir werden die Groovy-Klasse JsonSlurper verwenden , um von JSON in Objekte zu konvertieren .

Auch mit JsonSlurper wir haben eine Reihe von überladenen Parse - Methoden und einige spezifische Methoden wie parseText , parseFile, und andere.

Wir werden den parseText verwenden , um einen String in eine Account-Klasse zu analysieren :

def jsonSlurper = new JsonSlurper() def account = jsonSlurper.parseText('{"id":"123", "value":15.6 }') as Account

In dem obigen Code, haben wir eine Methode , die eine JSON empfängt String und gibt ein Konto - Objekt, das jedes Groovy Objekt sein kann.

Außerdem können wir einen JSON- String in eine Map analysieren und ihn ohne Umwandlung aufrufen. Mit der dynamischen Typisierung von Groovy können wir dasselbe wie das Objekt haben.

3.1. Analysieren der JSON-Eingabe

Die Standard-Parser-Implementierung für JsonSlurper ist JsonParserType.CHAR_BUFFER . In einigen Fällen müssen wir uns jedoch mit einem Analyseproblem befassen.

Schauen wir uns ein Beispiel dafür an: Bei einem JSON- String mit einer Datumseigenschaft erstellt JsonSlurper das Objekt nicht korrekt, da versucht wird, das Datum als String zu analysieren :

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

Infolgedessen gibt der obige Code ein Kontoobjekt mit allen Eigenschaften zurück, die Nullwerte enthalten .

Um dieses Problem zu beheben, können wir JsonParserType.INDEX_OVERLAY verwenden.

Infolgedessen wird versucht, die Erstellung von String- oder char-Arrays so weit wie möglich zu vermeiden :

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

Der obige Code gibt nun eine entsprechend erstellte Kontoinstanz zurück .

3.2 Parser-Varianten

Innerhalb des JsonParserType gibt es auch einige andere Implementierungen:

  • JsonParserType.LAX ermöglicht eine entspanntere JSON-Analyse mit Kommentaren, keinen Anführungszeichen usw.
  • JsonParserType.CHARACTER_SOURCE wird zum Parsen großer Dateien verwendet.

4. Fazit

Wir haben einen Großteil der JSON-Verarbeitung in einer Groovy-Anwendung anhand einiger einfacher Beispiele behandelt.

Weitere Informationen zu den Paketklassen groovy.json finden Sie in der Groovy-Dokumentation.

Überprüfen Sie den Quellcode der in diesem Artikel verwendeten Klassen sowie einige Komponententests in unserem GitHub-Repository.