Java valodā JSON, t.i., JavaScript Object Notation, spēlē ļoti svarīgu lomu servera puses atbildes manipulācijās. Java mēs varam pārbaudīt JSON dokumentus pret JSON shēmu. Lai veiktu pārbaudi, mēs izmantojam networknt JSON shēmas pārbaudītājs bibliotēka.
Šīs bibliotēkas izmantošanas iemesls ir tas, ka tā izmanto Džeksonu kā JSON bibliotēku un atbalsta jaunāko JSON shēmas versiju. Tīkla bibliotēka ir a Java JSON shēmas pamatprojekta v4, v6, v7 un v2019-09 (ko mēs izmantojam savā piemērā) specifikācijas ieviešana JSON shēmas validācijai. Tam ir Džeksons kā noklusējuma JSON parsētājs.
Pirmkārt, mēs ņemam JSON dokumenta un JSON shēmas piemēru, ko izmantojam savā programmā, lai veiktu validāciju.
JSON dokuments
{ 'name': 'Emma Watson', 'artist': 'Paul Walker', 'description': null, 'tags': ['oil', 'famous'] }
JSON shēma
{ '$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'] } } }
Mēs pievienojam šādu atkarību savā pom.xml failā.
com.networknt json-schema-validator 1.0.42
Mēs varam izmantot arī org.everit.json bibliotēka JSON objekta validēšanai. Lai to izmantotu, failā pom.xml ir jāpievieno šāda atkarība:
org.everit.json org.everit.json.schema 1.11.1
Mūsu gadījumā mēs izmantojam networknt Java bibliotēka.
Mēs izmantojam šādas darbības, lai apstiprinātu JSON dokumentu:
- Izveidojiet jaunu maven projektu.
- Pievienojiet JSON shēmas validatora atkarību mūsu pom.xml failā.
- Lasiet datus un shēmu no JSON dokumenta, izmantojot ObjectMapper.
- Lai validētu JSON dokumentu, izmantojiet JsonSchemaFactory metodi valide().
- Saglabājiet atgriezto rezultātu validācijas komplektā, izdrukājiet to uz ekrāna.
Tagad viss ir iestatīts, tāpēc mēs varam ieviest faktisko JSON dokumenta validācijas kodu.
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())); } } } }
Apraksts
Iepriekš minētajā kodā mēs izmantojam VersionFlag . Lai iegūtu JsonSchemaFactory , konstruktorā ir jānodod šis versijas karodziņš. Mūsu gadījumā mēs izmantojam 2019-09 JSON shēmas versija.
Mēs izmantojam arī pielāgotu palīgmetodi, t.i., inputStreamFromClasspath(), lai ielādētu abus failus no klases ceļa. Mēs izveidojam Jackson ObjectMapper klases gadījumu, lai nolasītu JSON datus no InputStream. Pēc tam mēs parsējam šos InputStream datus JsonNode objektā. Izmantojot JsonSchemaFactory gadījumu, mēs iegūstam JsonSchema objektu, lai apstiprinātu JsonNode. Mēs izveidojam validācijas kļūdu kopu, kurā ir viens vai vairāki ValidationMessage objekti. Validācijas kopa būs tukša, ja nebūs validācijas kļūdas.
Izvade