logo

JSON Validator Java

V jazyku Java hrá JSON, t. j. JavaScript Object Notation, veľmi dôležitú úlohu pri manipulácii s odozvou na strane servera. V jazyku Java môžeme overiť dokumenty JSON oproti schéme JSON. Na vykonanie validácie používame networknt JSON Schema validator knižnica.

Dôvodom použitia tejto knižnice je, že používa Jackson ako knižnicu JSON a podporuje najnovšiu verziu schémy JSON. Knižnica networknt je a Java implementácia špecifikácie JSON Schema Core Draft v4, v6, v7 a v2019-09 (ktorú používame v našom príklade) na overenie schémy JSON. Má Jackson ako predvolený analyzátor JSON.

Najprv si vezmeme príklad dokumentu JSON a schémy JSON, ktoré používame v našom programe na vykonanie validácie.

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

Do nášho súboru pom.xml pridáme nasledujúcu závislosť.

 com.networknt json-schema-validator 1.0.42 

Môžeme tiež použiť org.everit.json knižnica na overenie objektu JSON. Aby sme ho mohli použiť, musíme do nášho súboru pom.xml pridať nasledujúcu závislosť:

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

V našom prípade používame networknt knižnica Java.

Na overenie dokumentu JSON používame nasledujúce kroky:

  1. Vytvorte nový projekt umelca.
  2. Pridajte závislosť validátora schémy JSON do nášho súboru pom.xml.
  3. Prečítajte si údaje a schému z dokumentu JSON pomocou ObjectMapper.
  4. Na overenie dokumentu JSON použite metódu validate() JsonSchemaFactory.
  5. Uložte vrátený výsledok do validačnej sady a vytlačte ho na obrazovke.

Všetko je teraz nastavené, takže môžeme implementovať skutočný kód validácie dokumentu 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())); } } } } 

Popis

Vo vyššie uvedenom kóde používame VersionFlag . Na získanie JsonSchemaFactory , je potrebné odovzdať tento príznak verzie v konštruktore. V našom prípade používame 2019-09 verzia schémy JSON.

Používame tiež vlastnú pomocnú metódu, t. j. inputStreamFromClasspath(), na načítanie oboch súborov z cesty k triede. Vytvoríme inštanciu triedy Jackson ObjectMapper na čítanie údajov JSON z InputStream. Potom tieto údaje InputStream analyzujeme do objektu JsonNode. Pomocou inštancie JsonSchemaFactory získame objekt JsonSchema na overenie JsonNode. Vytvárame súbor chýb overenia, ktorý obsahuje jeden alebo viacero objektov ValidationMessage. Validačná sada bude prázdna, ak nedôjde k chybe overenia.

Výkon

JSON Validator Java