logo

JSON Validator Java

I Java spiller JSON, dvs. JavaScript Object Notation, en meget vigtig rolle i at manipulere server-side-svar. I Java kan vi validere JSON-dokumenter mod et JSON-skema. For at udføre valideringen bruger vi networknt JSON Schema validator bibliotek.

Grunden til at bruge dette bibliotek er, at det bruger Jackson som et JSON-bibliotek og understøtter den seneste JSON Schema-version. Netværksbiblioteket er en Java implementering af JSON Schema Core Draft v4, v6, v7 og v2019-09 (som vi bruger i vores eksempel) specifikation til JSON-skemavalidering. Den har Jackson som standard JSON-parser.

Først tager vi et eksempel på JSON-dokument og JSON-skema, som vi bruger i vores program til at udføre validering.

JSON-dokument

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

JSON-skema

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

Vi tilføjer følgende afhængighed i vores pom.xml-fil.

 com.networknt json-schema-validator 1.0.42 

Vi kan også bruge org.everit.json bibliotek til validering af JSON-objektet. For at bruge det skal vi tilføje følgende afhængighed i vores pom.xml-fil:

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

I vores tilfælde bruger vi netværknt Javas bibliotek.

Vi bruger følgende trin til at validere JSON-dokumentet:

  1. Opret et nyt maven-projekt.
  2. Tilføj JSON-skemavalideringsafhængigheden i vores pom.xml-fil.
  3. Læs dataene og skemaet fra JSON-dokumentet ved hjælp af ObjectMapper.
  4. Brug metoden validate() i JsonSchemaFactory til at validere JSON-dokumentet.
  5. Gem det returnerede resultat i valideringssættet, udskriv det på skærmen.

Alt er sat op nu, så vi kan implementere den faktiske kode til validering af JSON-dokumentet.

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

Beskrivelse

I ovenstående kode bruger vi VersionFlag . For at opnå JsonSchemaFactory , er det påkrævet at sende det versionsflag i konstruktøren. I vores tilfælde bruger vi 2019-09 version af JSON Schema.

Vi bruger også en brugerdefineret hjælpemetode, dvs. inputStreamFromClasspath(), til at indlæse begge filer fra klassestien. Vi opretter en instans af Jackson ObjectMapper-klassen for at læse JSON-dataene fra InputStream. Derefter parser vi disse InputStream-data til et JsonNode-objekt. Ved at bruge instansen af ​​JsonSchemaFactory får vi JsonSchema-objektet for at validere JsonNode. Vi opretter et sæt valideringsfejl, der indeholder et eller flere ValidationMessage-objekter. Valideringssættet vil være tomt, når der ikke er nogen valideringsfejl.

Produktion

JSON Validator Java