logo

JSON-Validator Java

In Java spielt JSON, also die JavaScript-Objektnotation, eine sehr wichtige Rolle bei der Manipulation serverseitiger Antworten. In Java können wir JSON-Dokumente anhand eines JSON-Schemas validieren. Um die Validierung durchzuführen, verwenden wir die networknt JSON Schema-Validator Bibliothek.

Der Grund für die Verwendung dieser Bibliothek besteht darin, dass sie Jackson als JSON-Bibliothek verwendet und die neueste JSON-Schema-Version unterstützt. Die Netzwerkbibliothek ist eine Java Implementierung der Spezifikation JSON Schema Core Draft v4, v6, v7 und v2019-09 (die wir in unserem Beispiel verwenden) für die JSON-Schemavalidierung. Es hat Jackson als Standard-JSON-Parser.

Zunächst nehmen wir ein Beispiel für ein JSON-Dokument und ein JSON-Schema, die wir in unserem Programm zur Durchführung der Validierung verwenden.

JSON-Dokument

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

JSON-Schema

 { '$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'] } } } 

Wir fügen die folgende Abhängigkeit in unsere pom.xml-Datei ein.

 com.networknt json-schema-validator 1.0.42 

Wir können auch die verwenden org.everit.json Bibliothek zur Validierung des JSON-Objekts. Um es zu verwenden, müssen wir die folgende Abhängigkeit in unserer pom.xml-Datei hinzufügen:

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

In unserem Fall verwenden wir die Netzwerknt Bibliothek von Java.

Wir verwenden die folgenden Schritte, um das JSON-Dokument zu validieren:

  1. Erstellen Sie ein neues Maven-Projekt.
  2. Fügen Sie die JSON-Schema-Validator-Abhängigkeit in unserer pom.xml-Datei hinzu.
  3. Lesen Sie die Daten und das Schema aus dem JSON-Dokument mit ObjectMapper.
  4. Verwenden Sie die Methode „validate()“ der JsonSchemaFactory, um das JSON-Dokument zu validieren.
  5. Speichern Sie das zurückgegebene Ergebnis im Validierungssatz und drucken Sie es auf dem Bildschirm aus.

Jetzt ist alles eingerichtet, sodass wir den eigentlichen Code zur Validierung des JSON-Dokuments implementieren können.

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())); } } } } 

Beschreibung

Im obigen Code verwenden wir die VersionFlag . Um die zu erhalten JsonSchemaFactory , muss dieses Versionsflag im Konstruktor übergeben werden. In unserem Fall verwenden wir die 2019-09 Version des JSON-Schemas.

Wir verwenden auch eine benutzerdefinierte Hilfsmethode, d. h. inputStreamFromClasspath(), um beide Dateien aus dem Klassenpfad zu laden. Wir erstellen eine Instanz der Jackson ObjectMapper-Klasse, um die JSON-Daten aus dem InputStream zu lesen. Danach analysieren wir diese InputStream-Daten in ein JsonNode-Objekt. Mithilfe der Instanz der JsonSchemaFactory erhalten wir das JsonSchema-Objekt zur Validierung des JsonNode. Wir erstellen eine Reihe von Validierungsfehlern, die ein oder mehrere ValidationMessage-Objekte enthalten. Der Validierungssatz ist leer, wenn kein Validierungsfehler vorliegt.

Ausgabe

JSON-Validator Java