У Java JSON, тобто нотація об’єктів JavaScript, відіграє дуже важливу роль у маніпулюванні відповіддю на стороні сервера. У Java ми можемо перевіряти документи JSON за схемою JSON. Щоб виконати перевірку, ми використовуємо Перевірка схеми networknt JSON бібліотека.
Причиною використання цієї бібліотеки є те, що вона використовує Jackson як бібліотеку JSON і підтримує останню версію схеми JSON. Бібліотека networknt - це a Java реалізація специфікації JSON Schema Core Draft v4, v6, v7 і v2019-09 (яку ми використовуємо в нашому прикладі) для перевірки схеми JSON. Він має Джексона як аналізатор JSON за замовчуванням.
Спочатку ми беремо приклад документа JSON і схеми JSON, які ми використовуємо в нашій програмі для виконання перевірки.
Документ JSON
{ 'name': 'Emma Watson', 'artist': 'Paul Walker', 'description': null, 'tags': ['oil', 'famous'] }
Схема 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'] } } }
Ми додаємо наступну залежність у наш файл pom.xml.
com.networknt json-schema-validator 1.0.42
Ми також можемо використовувати org.everit.json бібліотека для перевірки об’єкта JSON. Щоб використовувати його, нам потрібно додати таку залежність у наш файл pom.xml:
org.everit.json org.everit.json.schema 1.11.1
У нашому випадку ми використовуємо networknt бібліотека Java.
Ми використовуємо такі кроки для перевірки документа JSON:
- Створіть новий проект maven.
- Додайте залежність валідатора схеми JSON у наш файл pom.xml.
- Прочитайте дані та схему з документа JSON за допомогою ObjectMapper.
- Використовуйте метод validate() JsonSchemaFactory для перевірки документа JSON.
- Збережіть повернутий результат у наборі перевірки, надрукуйте його на екрані.
Зараз усе налаштовано, тому ми можемо реалізувати фактичний код перевірки документа 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())); } } } }
опис
У наведеному вище коді ми використовуємо VersionFlag . Щоб отримати JsonSchemaFactory , необхідно передати цей прапор версії в конструктор. У нашому випадку ми використовуємо 2019-09 версія схеми JSON.
Ми також використовуємо спеціальний допоміжний метод, наприклад, inputStreamFromClasspath(), щоб завантажити обидва файли зі шляху до класів. Ми створюємо екземпляр класу Jackson ObjectMapper для читання даних JSON із InputStream. Після цього ми аналізуємо дані InputStream в об’єкт JsonNode. Використовуючи екземпляр JsonSchemaFactory, ми отримуємо об’єкт JsonSchema для перевірки JsonNode. Ми створюємо набір помилок перевірки, який містить один або кілька об’єктів ValidationMessage. Набір перевірки буде порожнім, якщо немає помилки перевірки.
Вихід