logo

Validator JSON Java

U Javi, JSON, tj. JavaScript Object Notation, igra vrlo važnu ulogu u manipuliranju odgovorom na strani poslužitelja. U Javi možemo potvrditi JSON dokumente prema JSON shemi. Kako bismo izvršili provjeru valjanosti, koristimo se mrežni validator JSON sheme knjižnica.

Razlog korištenja ove biblioteke je taj što koristi Jackson kao JSON biblioteku i podržava najnoviju verziju JSON sheme. Mrežna knjižnica je a Java implementacija specifikacije JSON Schema Core Draft v4, v6, v7 i v2019-09 (koju koristimo u našem primjeru) za provjeru JSON sheme. Ima Jacksona kao zadani JSON parser.

Prvo ćemo uzeti primjer JSON dokumenta i JSON sheme, koje koristimo u našem programu za provjeru valjanosti.

JSON dokument

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

JSON shema

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

Sljedeću ovisnost dodajemo u našu datoteku pom.xml.

 com.networknt json-schema-validator 1.0.42 

Također možemo koristiti org.everit.json biblioteka za provjeru valjanosti JSON objekta. Da bismo ga koristili, moramo dodati sljedeću ovisnost u našu datoteku pom.xml:

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

U našem slučaju koristimo networknt biblioteka Jave.

Koristimo sljedeće korake za provjeru valjanosti JSON dokumenta:

  1. Stvorite novi maven projekt.
  2. Dodajte ovisnost validatora JSON sheme u našu datoteku pom.xml.
  3. Pročitajte podatke i shemu iz JSON dokumenta koristeći ObjectMapper.
  4. Koristite validate() metodu JsonSchemaFactory za provjeru JSON dokumenta.
  5. Pohranite vraćeni rezultat u skup za provjeru valjanosti i ispišite ga na ekranu.

Sada je sve postavljeno, tako da možemo implementirati stvarni kod za provjeru valjanosti JSON dokumenta.

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

Opis

U gornjem kodu koristimo VersionFlag . Za dobivanje JsonSchemaFactory , potrebno je proslijediti tu oznaku verzije u konstruktoru. U našem slučaju koristimo 2019-09 verzija JSON sheme.

Također koristimo prilagođenu pomoćnu metodu, tj. inputStreamFromClasspath(), za učitavanje obje datoteke iz classpath-a. Stvaramo instancu klase Jackson ObjectMapper za čitanje JSON podataka iz InputStreama. Nakon toga analiziramo te InputStream podatke u objekt JsonNode. Koristeći instancu JsonSchemaFactory, dobivamo objekt JsonSchema za provjeru valjanosti JsonNode. Stvaramo skup pogrešaka provjere valjanosti koji sadrži jedan ili više objekata ValidationMessage. Skup za provjeru valjanosti bit će prazan ako nema pogreške pri provjeri valjanosti.

Izlaz

Validator JSON Java