Travailler avec JSON dans Groovy

Travailler avec JSON dans Groovy

1. introduction

Dans cet article, nous allons décrire et voir des exemples d'utilisation de JSON dans une applicationGroovy.

Tout d'abord, pour que les exemples de cet article soient opérationnels, nous devons configurer nospom.xml:


    
        // ...
        
            org.codehaus.gmavenplus
            gmavenplus-plugin
            1.6
        
    


    // ...
    
        org.codehaus.groovy
        groovy-all
        2.4.13
    

Le plugin Maven le plus récent peut être trouvéhere et la dernière version desgroovy-allhere.

2. Analyser des objets Groovy en JSON

La conversion d'objets en JSON dans Groovy est assez simple, supposons que nous ayons une classeAccount:

class Account {
    String id
    BigDecimal value
    Date createdAt
}

Pour convertir une instance de cette classe en JSONString,, nous devons utiliser la classeJsonOutput et faire un appel à la méthode statiquetoJson():

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

En conséquence, nous obtiendrons le JSONString: analysé

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

2.1. Personnalisation de la sortie JSON

Comme nous pouvons le voir, la sortie de date n'est pas ce que nous voulions. Pour cela, à partir de la version 2.5, le packagegroovy.json est livré avec un ensemble d'outils dédié.

Avec la classeJsonGenerator, nous pouvons définir des options pour la sortie JSON:

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

println generator.toJson(account)

En conséquence, nous obtiendrons le JSON formaté sans le champ de valeur que nous avons exclu et avec la date formatée:

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

2.2. Formater la sortie JSON

Avec les méthodes ci-dessus, nous avons constaté que la sortie JSON était toujours sur une seule ligne, ce qui peut prêter à confusion si un objet plus complexe doit être traité.

Cependant, nous pouvons formater notre sortie en utilisant la méthodeprettyPrint:

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

Et nous obtenons le code JSON ci-dessous:

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

3. Analyse de JSON en objets Groovy

Nous allons utiliser la classe GroovyJsonSlurper pour convertir de JSON enObjects.

De plus, avecJsonSlurper, nous avons un tas de méthodesparse surchargées et quelques méthodes spécifiques commeparseText,parseFile, et autres.

Nous utiliserons lesparseText pour analyser unString en unAccount class:

def jsonSlurper = new JsonSlurper()

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

Dans le code ci-dessus, nous avons une méthode qui reçoit un JSONString et retourne un objetAccount, qui peut être n'importe quel objet Groovy.

De plus, nous pouvons analyser un JSONString en unMap, en l'appelant sans aucun cast, et avec le typage dynamique Groovy, nous pouvons avoir le même que l'objet.

3.1. Analyse de l'entrée JSON

L'implémentation par défaut de l'analyseur pourJsonSlurper estJsonParserType.CHAR_BUFFER, mais dans certains cas, nous devrons traiter un problème d'analyse.

Regardons un exemple pour ceci: étant donné un JSONString avec une propriété de date,JsonSlurper ne créera pas correctement l'objet car il essaiera d'analyser la date en tant queString:

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

En conséquence, le code ci-dessus renverra un objetAccount avec toutes les propriétés contenant des valeursnull.

Pour résoudre ce problème, nous pouvons utiliser lesJsonParserType.INDEX_OVERLAY.

En conséquence, il essaiera autant que possible d'éviter la création deString ou de tableaux de caractères:

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

Maintenant, le code ci-dessus retournera une instanceAccount créée de manière appropriée.

3.2 Parser Variants

De plus, à l'intérieur desJsonParserType,, nous avons d'autres implémentations:

  • JsonParserType.LAX permettra une analyse JSON plus détendue, avec des commentaires, sans guillemets, etc.

  • JsonParserType.CHARACTER_SOURCE est utilisé pour l'analyse de gros fichiers.

4. Conclusion

Nous avons couvert une grande partie du traitement JSON dans une application Groovy avec quelques exemples simples.

Pour plus d'informations sur les classes de packagegroovy.json, nous pouvons jeter un œil auxGroovy Documentation.

Vérifiez le code source des classes utilisées dans cet article, ainsi que certains tests unitaires, dans nosGitHub repository.