logo

JSON المدقق جافا

في Java، يلعب JSON، أي JavaScript Object Notation، دورًا مهمًا للغاية في معالجة الاستجابة من جانب الخادم. في Java، يمكننا التحقق من صحة مستندات JSON مقابل مخطط JSON. من أجل التحقق من الصحة، نستخدم مدقق مخطط Networknt JSON مكتبة.

سبب استخدام هذه المكتبة هو أنها تستخدم Jackson كمكتبة JSON وتدعم أحدث إصدار من مخطط JSON. مكتبة Networknt هي جافا تنفيذ مواصفات JSON Schema Core Draft v4 وv6 وv7 وv2019-09 (التي نستخدمها في مثالنا) للتحقق من صحة مخطط JSON. يحتوي على Jackson كمحلل 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 

وفي حالتنا نستخدم net.networknt مكتبة جافا.

نستخدم الخطوات التالية للتحقق من صحة مستند JSON:

  1. إنشاء مشروع مخضرم جديد.
  2. أضف تبعية مدقق مخطط JSON في ملف pom.xml الخاص بنا.
  3. اقرأ البيانات والمخطط من مستند JSON باستخدام ObjectMapper.
  4. استخدم طريقة validate() الخاصة بـ JsonSchemaFactory للتحقق من صحة مستند JSON.
  5. قم بتخزين النتيجة التي تم إرجاعها في مجموعة التحقق من الصحة وطباعتها على الشاشة.

تم إعداد كل شيء الآن، حتى نتمكن من تنفيذ الكود الفعلي للتحقق من صحة مستند 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 واحد أو أكثر. ستكون مجموعة التحقق من الصحة فارغة في حالة عدم وجود خطأ في التحقق من الصحة.

انتاج |

JSON المدقق جافا