Arbeiten mit JSON in Groovy
1. Einführung
In diesem Artikel werden Beispiele für die Arbeit mit JSON in einerGroovy-Anwendung beschrieben und angezeigt.
Um die Beispiele für diesen Artikel zum Laufen zu bringen, müssen wir zunächst unserepom.xml einrichten:
// ...
org.codehaus.gmavenplus
gmavenplus-plugin
1.6
// ...
org.codehaus.groovy
groovy-all
2.4.13
2. Analysieren von Groovy-Objekten in JSON
Das Konvertieren von Objekten in JSON in Groovy ist ziemlich einfach. Nehmen wir an, wir haben eineAccount-Klasse:
class Account {
String id
BigDecimal value
Date createdAt
}
Um eine Instanz dieser Klasse in eine JSONString, zu konvertieren, müssen Sie dieJsonOutput-Klasse verwenden und die statische MethodetoJson(): 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 die analysierten JSONString:
{"value":15.6,"createdAt":"2018-01-01T02:00:00+0000","id":"123"}
2.1. Anpassen der JSON-Ausgabe
Wie wir sehen können, entspricht die Datumsausgabe nicht unseren Wünschen. Zu diesem Zweck enthält das Paketgroovy.json ab Version 2.5 einen speziellen Satz von Tools.
Mit der KlasseJsonGeneratorkö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 festgestellt, dass die JSON-Ausgabe immer in einer einzelnen Zeile war und es verwirrend werden kann, wenn ein komplexeres Objekt behandelt werden muss.
Wir können unsere Ausgabe jedoch mit der MethodeprettyPrint 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 in Groovy-Objekte
Wir werden die Groovy-KlasseJsonSlurper verwenden, um von JSON inObjects. zu konvertieren
Außerdem haben wir mitJsonSlurper eine Reihe überladenerparse-Methoden und einige spezifische Methoden wieparseText,parseFile, und andere.
Wir werdenparseText verwenden, umString inAccount class: zu analysieren
def jsonSlurper = new JsonSlurper()
def account = jsonSlurper.parseText('{"id":"123", "value":15.6 }') as Account
Im obigen Code haben wir eine Methode, die ein JSONString empfängt und einAccount Objekt zurückgibt, das ein beliebiges Groovy-Objekt sein kann.
Außerdem können wir ein JSONString in einMap, analysieren, das es ohne Umwandlung aufruft, und 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ürJsonSlurper istJsonParserType.CHAR_BUFFER. In einigen Fällen müssen wir uns jedoch mit einem Parsing-Problem befassen.
Schauen wir uns ein Beispiel dafür an: Bei einem JSONString mit einer Datumseigenschaft erstelltJsonSlurper das Objekt nicht korrekt, da versucht wird, das Datum alsString: 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 einAccount-Objekt mit allen Eigenschaften zurück, dienull-Werte enthalten.
Um dieses Problem zu beheben, können wirJsonParserType.INDEX_OVERLAY. verwenden
Infolgedessen wird versucht, die Erstellung vonString 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 erstellteAccount-Instanz zurück.
3.2 Parser Variants
Außerdem haben wir innerhalb derJsonParserType, 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 vongroovy.jsonfinden Sie unterGroovy Documentation.
Überprüfen Sie den Quellcode der in diesem Artikel verwendeten Klassen sowie einige Komponententests in unserenGitHub repository.