logo

Validateur JSON Java

En Java, JSON, c'est-à-dire JavaScript Object Notation, joue un rôle très important dans la manipulation de la réponse côté serveur. En Java, nous pouvons valider des documents JSON par rapport à un schéma JSON. Afin d'effectuer la validation, nous utilisons le validateur de schéma JSON networknt bibliothèque.

La raison de l'utilisation de cette bibliothèque est qu'elle utilise Jackson comme bibliothèque JSON et prend en charge la dernière version du schéma JSON. La bibliothèque networknt est un Java implémentation de la spécification JSON Schema Core Draft v4, v6, v7 et v2019-09 (que nous utilisons dans notre exemple) pour la validation du schéma JSON. Il a Jackson comme analyseur JSON par défaut.

Tout d'abord, nous prenons un exemple de document JSON et de schéma JSON, que nous utilisons dans notre programme pour effectuer la validation.

Document JSON

 { 'name': 'Emma Watson', 'artist': 'Paul Walker', 'description': null, 'tags': ['oil', 'famous'] } 

Schéma JSON

 { '$schema': 'https://json-schema.org/draft/2019-09/schema#', '$id+': 'http://my-paintings-api.com/schemas/painting-schema.json', 'type': 'object', 'title': 'Painting', 'description': 'Painting information', 'additionalProperties': true, 'required': ['name', 'artist', 'description', 'tags'], 'properties': { 'name': { 'type': 'string', 'description': 'Painting name' }, 'artist': { 'type': 'string', 'maxLength': 50, 'description': 'Name of the artist' }, 'description': { 'type': ['string', 'null'], 'description': 'Painting description' }, 'tags': { 'type': 'array', 'items': { '$ref': '#/$defs/tag' } } }, '$defs': { 'tag': { 'type': 'string', 'enum': ['oil', 'watercolor', 'digital', 'famous'] } } } 

Nous ajoutons la dépendance suivante dans notre fichier pom.xml.

 com.networknt json-schema-validator 1.0.42 

Nous pouvons également utiliser le org.everit.json bibliothèque pour valider l’objet JSON. Pour l'utiliser, nous devons ajouter la dépendance suivante dans notre fichier pom.xml :

 org.everit.json org.everit.json.schema 1.11.1 

Dans notre cas, nous utilisons le réseau bibliothèque de Java.

Nous utilisons les étapes suivantes pour valider le document JSON :

  1. Créez un nouveau projet maven.
  2. Ajoutez la dépendance du validateur de schéma JSON dans notre fichier pom.xml.
  3. Lisez les données et le schéma du document JSON à l'aide d'ObjectMapper.
  4. Utilisez la méthode validate() de JsonSchemaFactory pour valider le document JSON.
  5. Stockez le résultat renvoyé dans l'ensemble de validation, imprimez-le à l'écran.

Tout est configuré maintenant, nous pouvons donc implémenter le code réel de validation du document JSON.

JsonValidatorExample.java

 //import required classes and packages package javaTpoint.ObjectToJsonConversion; import java.io.InputStream; import java.util.Set; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; import com.networknt.schema.SpecVersion; import com.networknt.schema.ValidationMessage; // create class to validate JSON document public class JsonValidatorExample { // create inputStreamFromClasspath() method to load the JSON data from the class path private static InputStream inputStreamFromClasspath( String path ) { // returning stream return Thread.currentThread().getContextClassLoader().getResourceAsStream( path ); } // main() method start public static void main( String[] args ) throws Exception { // create instance of the ObjectMapper class ObjectMapper objectMapper = new ObjectMapper(); // create an instance of the JsonSchemaFactory using version flag JsonSchemaFactory schemaFactory = JsonSchemaFactory.getInstance( SpecVersion.VersionFlag.V201909 ); // store the JSON data in InputStream try( InputStream jsonStream = inputStreamFromClasspath( 'C:\Users\ajeet\eclipse-workspace\data.json' ); InputStream schemaStream = inputStreamFromClasspath( 'C:\Users\ajeet\eclipse-workspace\schema.json' ) ){ // read data from the stream and store it into JsonNode JsonNode json = objectMapper.readTree(jsonStream); // get schema from the schemaStream and store it into JsonSchema JsonSchema schema = schemaFactory.getSchema(schemaStream); // create set of validation message and store result in it Set validationResult = schema.validate( json ); // show the validation errors if (validationResult.isEmpty()) { // show custom message if there is no validation error System.out.println( 'There is no validation errors' ); } else { // show all the validation error validationResult.forEach(vm -> System.out.println(vm.getMessage())); } } } } 

Description

Dans le code ci-dessus, nous utilisons le VersionDrapeau . Pour obtenir le JsonSchemaFactory , il est nécessaire de transmettre cet indicateur de version dans le constructeur. Dans notre cas, nous utilisons le 2019-09 version du schéma JSON.

Nous utilisons également une méthode d'assistance personnalisée, c'est-à-dire inputStreamFromClasspath(), pour charger les deux fichiers à partir du chemin de classe. Nous créons une instance de la classe Jackson ObjectMapper pour lire les données JSON de l'InputStream. Après cela, nous analysons ces données InputStream dans un objet JsonNode. En utilisant l'instance de JsonSchemaFactory, nous obtenons l'objet JsonSchema pour valider le JsonNode. Nous créons un ensemble d'erreurs de validation qui contient un ou plusieurs objets ValidationMessage. L'ensemble de validation sera vide lorsqu'il n'y aura pas d'erreur de validation.

Sortir

Validateur JSON Java