Java, JSON, ty JavaScript Object Notation, vaidina labai svarbų vaidmenį manipuliuojant serverio atsaku. „Java“ JSON dokumentus galime patvirtinti pagal JSON schemą. Norėdami atlikti patvirtinimą, naudojame networknt JSON schemos tikrintuvas biblioteka.
Šios bibliotekos naudojimo priežastis yra ta, kad ji naudoja Jackson kaip JSON biblioteką ir palaiko naujausią JSON schemos versiją. Tinklo biblioteka yra a Java JSON schemos pagrindinio juodraščio v4, v6, v7 ir v2019-09 (kurią naudojame pavyzdyje) specifikacijos įgyvendinimas JSON schemos patvirtinimui. Jame yra Jackson kaip numatytasis JSON analizatorius.
Pirmiausia paimame JSON dokumento ir JSON schemos pavyzdį, kuriuos naudojame savo programoje tikrindami.
JSON dokumentas
{ 'name': 'Emma Watson', 'artist': 'Paul Walker', 'description': null, 'tags': ['oil', 'famous'] }
JSON schema
{ '$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'] } } }
Į savo pom.xml failą pridedame šią priklausomybę.
com.networknt json-schema-validator 1.0.42
Taip pat galime naudoti org.everit.json biblioteka JSON objektui patvirtinti. Norėdami jį naudoti, į savo pom.xml failą turime įtraukti šią priklausomybę:
org.everit.json org.everit.json.schema 1.11.1
Mūsų atveju mes naudojame networknt Java biblioteka.
Mes atliekame šiuos veiksmus, kad patvirtintume JSON dokumentą:
- Sukurkite naują „maven“ projektą.
- Pridėkite JSON schemos tikrinimo priemonės priklausomybę mūsų pom.xml faile.
- Nuskaitykite duomenis ir schemą iš JSON dokumento naudodami ObjectMapper.
- Naudokite JsonSchemaFactory patvirtinimo () metodą, kad patvirtintumėte JSON dokumentą.
- Išsaugokite grąžintą rezultatą patvirtinimo rinkinyje, išspausdinkite jį ekrane.
Dabar viskas nustatyta, todėl galime įdiegti tikrąjį JSON dokumento patvirtinimo kodą.
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())); } } } }
apibūdinimas
Aukščiau pateiktame kode mes naudojame VersionFlag . Norėdami gauti JsonSchemaFactory , konstruktoriuje reikia perduoti tą versijos vėliavėlę. Mūsų atveju mes naudojame 2019-09 m JSON schemos versija.
Taip pat naudojame pasirinktinį pagalbinį metodą, ty inputStreamFromClasspath(), kad įkeltume abu failus iš klasės kelio. Sukuriame Jackson ObjectMapper klasės egzempliorių, kad galėtume nuskaityti JSON duomenis iš InputStream. Po to analizuojame tuos InputStream duomenis į JsonNode objektą. Naudodami JsonSchemaFactory egzempliorių gauname JsonSchema objektą, kad patvirtintume JsonNode. Sukuriame patvirtinimo klaidų rinkinį, kuriame yra vienas ar daugiau ValidationMessage objektų. Patvirtinimo rinkinys bus tuščias, jei nėra patvirtinimo klaidos.
Išvestis