logo

Validator JSON Java

În Java, JSON, adică JavaScript Object Notation, joacă un rol foarte important în manipularea răspunsului de pe partea serverului. În Java, putem valida documentele JSON cu o schemă JSON. Pentru a efectua validarea, folosim validator de schemă JSON networknt bibliotecă.

Motivul utilizării acestei biblioteci este că folosește Jackson ca bibliotecă JSON și acceptă cea mai recentă versiune a schemei JSON. Biblioteca networknt este a Java implementarea specificației JSON Schema Core Draft v4, v6, v7 și v2019-09 (pe care le folosim în exemplul nostru) pentru validarea schemei JSON. Are Jackson ca parser JSON implicit.

În primul rând, luăm un exemplu de document JSON și schema JSON, pe care le folosim în programul nostru pentru a efectua validarea.

Document JSON

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

Schema 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'] } } } 

Adăugăm următoarea dependență în fișierul nostru pom.xml.

 com.networknt json-schema-validator 1.0.42 

Putem folosi și org.everit.json bibliotecă pentru validarea obiectului JSON. Pentru a-l folosi, trebuie să adăugăm următoarea dependență în fișierul nostru pom.xml:

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

În cazul nostru, folosim networknt biblioteca Java.

Folosim următorii pași pentru a valida documentul JSON:

  1. Creați un nou proiect maven.
  2. Adăugați dependența validatorului de schemă JSON în fișierul nostru pom.xml.
  3. Citiți datele și schema din documentul JSON folosind ObjectMapper.
  4. Utilizați metoda validate() din JsonSchemaFactory pentru a valida documentul JSON.
  5. Stocați rezultatul returnat în setul de validare, imprimați-l pe ecran.

Totul este configurat acum, astfel încât să putem implementa codul real de validare a documentului 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())); } } } } 

Descriere

În codul de mai sus, folosim VersionFlag . Pentru a obține JsonSchemaFactory , este necesar să treceți acel flag de versiune în constructor. În cazul nostru, folosim perioada 2019-09 versiunea schemei JSON.

De asemenea, folosim o metodă de ajutor personalizată, adică inputStreamFromClasspath(), pentru a încărca ambele fișiere din calea clasei. Creăm o instanță a clasei Jackson ObjectMapper pentru a citi datele JSON din InputStream. După aceea, analizăm acele date InputStream într-un obiect JsonNode. Folosind instanța JsonSchemaFactory, obținem obiectul JsonSchema pentru a valida JsonNode. Creăm un set de erori de validare care conține unul sau mai multe obiecte ValidationMessage. Setul de validare va fi gol atunci când nu există nicio eroare de validare.

Ieșire

Validator JSON Java