Gson সাধারণত JSON Schema Validation সরাসরি সাপোর্ট করে না, তবে আপনি Gson এর সাথে JSON Schema Validation সম্পাদন করার জন্য কিছু সহায়ক লাইব্রেরি ব্যবহার করতে পারেন। JSON Schema Validation এর জন্য বিভিন্ন লাইব্রেরি উপলব্ধ, যেমন Everit বা json-schema-validator। এই লাইব্রেরিগুলোর মাধ্যমে আপনি JSON ডেটার কাঠামো এবং বৈধতা পরীক্ষা করতে পারেন, এবং Gson-এ ডেটা সিরিয়ালাইজ বা ডেসিরিয়ালাইজ করার পর JSON Schema অনুযায়ী যাচাই করতে পারেন।
1. JSON Schema Validation লাইব্রেরি ব্যবহার করা
এখানে Everit JSON Schema Validator এর সাহায্যে Gson এর সাথে JSON Schema Validation করার উদাহরণ দেয়া হলো।
1.1 Maven-এ Dependencies যুক্ত করা
প্রথমে Maven প্রোজেক্টে Everit JSON Schema লাইব্রেরির ডিপেনডেন্সি যোগ করতে হবে। pom.xml এ নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.everit.json</groupId>
<artifactId>org.everit.json.schema</artifactId>
<version>1.14.1</version> <!-- সর্বশেষ সংস্করণ চেক করুন -->
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version> <!-- Gson এর সর্বশেষ সংস্করণ -->
</dependency>
1.2 JSON Schema তৈরি করা
ধরা যাক, আপনার JSON ডেটা একটি Person অবজেক্ট, যার মধ্যে name, age, এবং email ফিল্ড রয়েছে। আপনি একটি JSON Schema তৈরি করবেন, যা এই ফিল্ডগুলোর বৈধতা পরীক্ষা করবে।
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer",
"minimum": 18
},
"email": {
"type": "string",
"format": "email"
}
},
"required": ["name", "age", "email"]
}
এই JSON Schema অনুযায়ী:
nameএকটি string হতে হবে।ageএকটি integer হতে হবে এবং সর্বনিম্ন 18 হতে হবে।emailএকটি string হতে হবে এবং বৈধ ইমেইল ফরম্যাটে থাকতে হবে।- সব তিনটি ফিল্ড required।
1.3 JSON Validation কোড
এখন, JSON ডেটা যাচাই করার জন্য Gson এবং Everit JSON Schema লাইব্রেরি ব্যবহার করে কোড লিখতে হবে।
import com.google.gson.Gson;
import org.everit.json.schema.*;
import org.json.JSONObject;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
public class Main {
public static void main(String[] args) {
// JSON Schema ফাইলটি লোড করা
InputStream schemaStream = Main.class.getResourceAsStream("/person-schema.json");
JSONObject schemaJson = new JSONObject(new JSONTokener(schemaStream));
Schema schema = SchemaLoader.load(schemaJson);
// JSON ডেটা তৈরি করা
String personJson = "{\"name\":\"John\", \"age\":25, \"email\":\"john@example.com\"}";
// Gson দিয়ে JSON ডেটা ডেসিরিয়ালাইজ করা
Gson gson = new Gson();
Person person = gson.fromJson(personJson, Person.class);
// JSON Schema Validation করা
try {
JSONObject jsonObject = new JSONObject(personJson);
schema.validate(jsonObject); // যদি JSON Schema এ কোনো সমস্যা থাকে, এটি exception ছুঁড়ে দেবে
System.out.println("JSON is valid according to the schema!");
} catch (ValidationException e) {
System.out.println("JSON is invalid: " + e.getMessage());
}
}
}
// Person class
class Person {
private String name;
private int age;
private String email;
// Getters and Setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
1.4 আউটপুট
যদি JSON ডেটা Schema অনুযায়ী বৈধ হয়, তবে আউটপুট হবে:
JSON is valid according to the schema!
এবং যদি কোনো সমস্যা থাকে, তবে একটি ValidationException ছুঁড়ে দেবে, এবং এর বার্তা প্রদান করবে:
JSON is invalid: age: 18 is the minimum value
2. Gson এবং JSON Schema Validation এর সুবিধা
- বৈধতা নিশ্চিতকরণ: JSON Schema এর মাধ্যমে JSON ডেটার কাঠামো এবং মান যাচাই করতে পারেন, যা নিশ্চিত করে যে ডেটাটি প্রত্যাশিত ফরম্যাট এবং নিয়ম অনুযায়ী আছে।
- ডেটার মান যাচাই: আপনি
requiredফিল্ড, ফিল্ড টাইপ, মানের পরিসীমা (range), ফরম্যাট ইত্যাদি যাচাই করতে পারেন। - অভ্যন্তরীণ ডেটার কাস্টম যাচাই: JSON Schema ব্যবহার করে আপনি আরও জটিল এবং কাস্টম যাচাই নিয়ম তৈরি করতে পারেন, যেমন নির্দিষ্ট কনস্ট্রেইন্টস, ফরম্যাট, ইত্যাদি।
3. JSON Schema Validation এর জন্য অন্যান্য লাইব্রেরি
Gson এর সাথে JSON Schema Validation করার জন্য অন্যান্য লাইব্রেরিও ব্যবহার করা যেতে পারে, যেমন:
- json-schema-validator (Jeremy Long): JSON Schema Validation এর জন্য একটি জনপ্রিয় লাইব্রেরি।
- Jackson Schema: Jackson লাইব্রেরি JSON Schema Validation এর জন্য ব্যবহৃত হতে পারে, যা Gson এর বিকল্প।
সারাংশ
- Everit JSON Schema Validator ব্যবহার করে আপনি Gson এর সাথে JSON ডেটা Validate করতে পারেন।
- JSON Schema-এ একটি ডেটার কাঠামো এবং বৈধতা পরীক্ষা করা সম্ভব।
- এটি বিশেষত ব্যবহৃত হয় যেখানে বড় JSON ডেটার কাঠামো যাচাই করা প্রয়োজন, এবং এতে required ফিল্ড, types, ranges, এবং formats সহ আরও অনেক বৈশিষ্ট্য অন্তর্ভুক্ত থাকে।
JSON Schema Validation হলো একটি পদ্ধতি যা JSON ডেটার কাঠামো এবং কনটেন্ট যাচাই করতে ব্যবহৃত হয়। এটি একটি নির্দিষ্ট JSON object এর কাঠামো (structure) এবং মান (values) সঠিকভাবে গঠিত কি না তা যাচাই করে, যাতে আপনি নিশ্চিত হতে পারেন যে আপনার JSON ডেটা পূর্বনির্ধারিত শর্তাবলী অনুসরণ করছে। JSON Schema একটি ডকুমেন্টেশন বা স্কিমা যা JSON ডেটার জন্য বৈধ কাঠামো এবং মানের নিয়ম নির্ধারণ করে।
JSON Schema-এর সুবিধা:
- Data Integrity: এটি নিশ্চিত করে যে JSON ডেটা সঠিকভাবে ফরম্যাট করা হয়েছে এবং সমস্ত প্রয়োজনীয় ক্ষেত্রগুলি সঠিক টাইপের এবং সীমাবদ্ধতাগুলির মধ্যে পড়ে।
- Validation: JSON ডেটার ক্ষেত্রে ভুল টাইপ, অপর্যাপ্ত মান, বা অবাঞ্ছিত মান থাকা সমস্যাগুলি চিহ্নিত করা সহজ হয়।
- Interoperability: JSON স্কিমার মাধ্যমে বিভিন্ন সিস্টেম বা অ্যাপ্লিকেশন গুলি JSON ডেটা পার্স বা পাঠানোর সময় নির্দিষ্ট মানদণ্ড অনুসরণ করতে পারে।
- Documentation: JSON স্কিমা ডেটার কাঠামো স্পষ্টভাবে ডকুমেন্ট করতে সহায়ক, যা ডেভেলপারদের জন্য পার্স বা ডেটা হ্যান্ডলিং সহজ করে।
JSON Schema এর কাঠামো
JSON Schema সাধারণত JSON object হিসেবে থাকে এবং এতে properties, types, required fields, constraints, ইত্যাদি সম্পর্কে তথ্য থাকে। একটি সাধারণ JSON Schema দেখতে এইরকম হতে পারে:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer",
"minimum": 18
},
"email": {
"type": "string",
"format": "email"
}
},
"required": ["name", "age"]
}
এখানে:
- $schema: স্কিমা সংক্রান্ত তথ্য।
- type: JSON object এর ধরণ (এখানে
object)। - properties: JSON object এর ফিল্ডগুলি এবং তাদের টাইপ।
- required: সেই ফিল্ডগুলি যেগুলি অবশ্যই থাকতে হবে (এখানে
nameএবংage)। - minimum: একটি মানের জন্য সীমাবদ্ধতা (এখানে
ageএর জন্য ১৮ বা তার বেশি হতে হবে)।
Gson এবং JSON Schema Validation
Gson নিজে JSON স্কিমা ভ্যালিডেশন সরাসরি সমর্থন করে না, তবে আপনি Gson এর সাথে JSON Schema Validation করতে কিছু বাইরের লাইব্রেরি ব্যবহার করতে পারেন। এই কাজটি করার জন্য একটি জনপ্রিয় লাইব্রেরি হলো Everit JSON Schema।
Gson এবং Everit JSON Schema ব্যবহার করে JSON Schema Validation
এখানে Everit JSON Schema লাইব্রেরি ব্যবহার করে Gson এর JSON ডেটার স্কিমা যাচাই করার উদাহরণ দেওয়া হলো।
১. প্রথমে লাইব্রেরি যুক্ত করা
আপনাকে Everit JSON Schema লাইব্রেরি ব্যবহার করতে হবে। Maven প্রোজেক্টে এটি যুক্ত করার জন্য নিচের ডিপেনডেন্সি ব্যবহার করতে পারেন:
<dependency>
<groupId>org.everit.json</groupId>
<artifactId>json-schema</artifactId>
<version>1.14.1</version>
</dependency>
২. JSON Schema Validation এর উদাহরণ
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import org.everit.json.schema.*;
import org.everit.json.schema.loader.SchemaLoader;
import org.json.JSONObject;
public class Main {
public static void main(String[] args) {
// JSON schema definition
String schemaStr = "{\n" +
" \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n" +
" \"type\": \"object\",\n" +
" \"properties\": {\n" +
" \"name\": {\n" +
" \"type\": \"string\"\n" +
" },\n" +
" \"age\": {\n" +
" \"type\": \"integer\",\n" +
" \"minimum\": 18\n" +
" },\n" +
" \"email\": {\n" +
" \"type\": \"string\",\n" +
" \"format\": \"email\"\n" +
" }\n" +
" },\n" +
" \"required\": [\"name\", \"age\"]\n" +
"}";
// Example JSON object to validate
String jsonData = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 20,\n" +
" \"email\": \"john.doe@example.com\"\n" +
"}";
// Convert JSON Schema to JSONObject
JSONObject rawSchema = new JSONObject(schemaStr);
// Create Schema instance
Schema schema = SchemaLoader.load(rawSchema);
// Convert JSON data to JsonObject using Gson
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonData, JsonObject.class);
// Validate JSON data against the schema
try {
schema.validate(new JSONObject(jsonObject.toString()));
System.out.println("JSON is valid according to the schema.");
} catch (ValidationException e) {
System.out.println("JSON is invalid: " + e.getMessage());
}
}
}
কোডের ব্যাখ্যা:
- JSON Schema Definition: আমরা একটি JSON স্কিমা ডিফাইন করেছি যেখানে কিছু প্রপার্টি এবং কনস্ট্রেইন্ট দেওয়া হয়েছে।
- Everit JSON Schema Loader: SchemaLoader.load() পদ্ধতির মাধ্যমে স্কিমাটি লোড করা হয় এবং Schema অবজেক্ট তৈরি করা হয়।
- JSON Object Validation:
schema.validate()ব্যবহার করে JSON ডেটাকে স্কিমার সাথে যাচাই করা হয়। - যদি JSON ডেটা স্কিমার সাথে মিলে, তাহলে "JSON is valid according to the schema" মেসেজটি প্রদর্শিত হবে। অন্যথায়, ValidationException ধরা পড়ে এবং ত্রুটির মেসেজ দেখানো হয়।
JSON Schema এর কিছু সাধারণ বৈশিষ্ট্য:
- type: JSON ডেটার টাইপ (যেমন,
string,integer,object, ইত্যাদি)। - properties: JSON অবজেক্টের বিভিন্ন প্রপার্টি বা ফিল্ড।
- required: যে প্রপার্টিগুলি অবশ্যই থাকা উচিত (যেমন,
name,age)। - minimum / maximum: সংখ্যার জন্য সীমাবদ্ধতা নির্ধারণ।
- format: নির্দিষ্ট ফরম্যাট (যেমন,
email,date)। - enum: নির্দিষ্ট মানের একটি তালিকা (যেমন,
enum: ["small", "medium", "large"])।
JSON Schema Validation হল একটি গুরুত্বপূর্ণ প্রক্রিয়া যা JSON ডেটার কাঠামো এবং মান যাচাই করতে ব্যবহৃত হয়। Gson এর সাথে Everit JSON Schema লাইব্রেরি ব্যবহার করে আপনি সহজেই JSON ডেটা স্কিমা যাচাই করতে পারেন। এর মাধ্যমে আপনি আপনার JSON ডেটার সঠিকতা নিশ্চিত করতে পারবেন, যাতে ডেটা সঠিকভাবে প্রক্রিয়া এবং ব্যবহার করা যায়।
Gson লাইব্রেরি দিয়ে JSON স্কিমা ব্যবহার করে ডেটার ভ্যালিডেশন করা সম্ভব, তবে Gson নিজে JSON স্কিমা ভ্যালিডেশন সরাসরি সাপোর্ট করে না। তবে, আপনি JSON Schema Validation করার জন্য অন্যান্য লাইব্রেরি যেমন Everit JSON Schema ব্যবহার করতে পারেন, যা JSON স্কিমা ফাইলের সাথে আপনার JSON ডেটার ভ্যালিডেশন করতে সহায়ক। এরপর, Gson ব্যবহার করে JSON ডেটা প্যার্স করতে পারেন এবং সেই ডেটার ভ্যালিডেশন করতে পারেন।
এখানে আমরা Everit JSON Schema লাইব্রেরি ব্যবহার করে কিভাবে JSON স্কিমার মাধ্যমে JSON ভ্যালিডেশন করতে পারি, এবং এরপর Gson ব্যবহার করে সেই JSON ডেটা ডেসিরিয়ালাইজ করতে পারি, তা দেখাব।
1. Everit JSON Schema Dependency:
প্রথমে, আপনাকে Everit JSON Schema লাইব্রেরিটি প্রোজেক্টে যুক্ত করতে হবে। যদি আপনি Maven ব্যবহার করেন, তাহলে আপনার pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.everit.json</groupId>
<artifactId>everit-json-schema</artifactId>
<version>1.14.1</version>
</dependency>
যদি আপনি Gradle ব্যবহার করেন, তাহলে build.gradle ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
implementation 'org.everit.json:everit-json-schema:1.14.1'
2. JSON Schema তৈরি করা:
ধরা যাক, আপনি একটি Person অবজেক্টের JSON স্কিমা তৈরি করতে চান, যেখানে name (string), age (integer), এবং email (string) ফিল্ড থাকবে।
এটি একটি JSON স্কিমা (schema.json) হতে পারে:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer"
},
"email": {
"type": "string"
}
},
"required": ["name", "age", "email"]
}
3. JSON Schema Validation এবং Gson Integration:
এখন, আপনি Everit JSON Schema লাইব্রেরি ব্যবহার করে JSON স্কিমা ফাইলের মাধ্যমে JSON ডেটার ভ্যালিডেশন করবেন এবং তারপর Gson ব্যবহার করে JSON ডেটা ডেসিরিয়ালাইজ করবেন।
Step 1: JSON স্কিমা লোড করা এবং JSON ভ্যালিডেশন করা
import com.google.gson.Gson;
import com.everit.json.schema.*;
import com.everit.json.schema.loader.SchemaLoader;
import org.json.JSONObject;
import org.json.JSONTokener;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
// JSON স্কিমা লোড করা
FileReader schemaReader = new FileReader("schema.json");
JSONObject jsonSchema = new JSONObject(new JSONTokener(schemaReader));
Schema schema = SchemaLoader.load(jsonSchema);
// JSON ডেটা লোড করা
String jsonData = "{\"name\":\"John\", \"age\":30, \"email\":\"john.doe@example.com\"}";
// JSON ভ্যালিডেশন
JSONObject jsonSubject = new JSONObject(jsonData);
try {
schema.validate(jsonSubject); // JSON ভ্যালিডেশন
System.out.println("JSON is valid");
} catch (ValidationException e) {
System.out.println("JSON is invalid: " + e.getMessage());
return;
}
// Gson দিয়ে JSON ডেটা ডেসিরিয়ালাইজ করা
Gson gson = new Gson();
Person person = gson.fromJson(jsonData, Person.class);
System.out.println(person);
}
}
Step 2: Person ক্লাস তৈরি করা
class Person {
String name;
int age;
String email;
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + ", email='" + email + "'}";
}
}
ব্যাখ্যা:
- Everit JSON Schema লাইব্রেরি ব্যবহার করে আমরা প্রথমে JSON স্কিমা লোড করেছি।
- স্কিমা লোড করার পর,
schema.validate(jsonSubject)ব্যবহার করে JSON ডেটার ভ্যালিডেশন করা হয়েছে। - যদি JSON ডেটা স্কিমার সাথে মিলে যায়, তাহলে এটি valid বলে গণ্য হবে এবং Gson দিয়ে JSON ডেটা ডেসিরিয়ালাইজ করা হবে।
- যদি JSON ডেটার কোনো ত্রুটি থাকে, তবে এটি invalid বলে রিপোর্ট করা হবে।
- Gson ব্যবহার করে JSON ডেটাকে
Personঅবজেক্টে ডেসিরিয়ালাইজ করা হয়েছে।
4. Output:
যদি JSON ডেটা স্কিমার সাথে সঠিকভাবে মিলে যায়, তাহলে আউটপুট হবে:
JSON is valid
Person{name='John', age=30, email='john.doe@example.com'}
যদি JSON ডেটা স্কিমার সাথে সঠিকভাবে না মিলে, তাহলে আউটপুট হবে:
JSON is invalid: Missing required properties: name, age, email
5. JSON Schema Validation Features:
- Required Fields: স্কিমা অনুযায়ী যদি কোনো প্রপার্টি মিসিং থাকে, তাহলে
ValidationExceptionছুড়ে দেওয়া হবে। - Type Validation: JSON ফিল্ডের টাইপ স্কিমায় কনফিগার করা থাকলে, তা ঠিকভাবে চেক করা হবে (যেমন,
string,integerইত্যাদি)। - Additional Validation: JSON স্কিমা অনুযায়ী আরও কাস্টম ভ্যালিডেশন যোগ করা সম্ভব, যেমন
minLength,maxLength,pattern(রেগুলার এক্সপ্রেশন), এবং আরও অনেক কিছু।
সংক্ষেপে:
- Gson সরাসরি JSON Schema Validation সাপোর্ট করে না, তবে আপনি Everit JSON Schema বা অন্য কোনো JSON Schema লাইব্রেরি ব্যবহার করে JSON ভ্যালিডেশন করতে পারেন।
- JSON স্কিমা দিয়ে ডেটার ভ্যালিডেশন করার পর Gson দিয়ে সেই ডেটাকে Java অবজেক্টে ডেসিরিয়ালাইজ করা যায়।
- Everit JSON Schema লাইব্রেরি JSON ডেটা এবং স্কিমার মধ্যে মিল যাচাই করে, এবং যদি কোনো ভ্যালিডেশন ত্রুটি থাকে, তা বিস্তারিতভাবে প্রদান করে।
এভাবে আপনি Gson-এর সাথে JSON স্কিমা ব্যবহার করে ডেটার ভ্যালিডেশন কার্যকরভাবে করতে পারেন।
JSON ফাইলের integrity এবং consistency চেক করা মূলত দুইটি বিষয়: একটির মাধ্যমে যাচাই করা হয় যে JSON ফাইলটি সঠিকভাবে ফরম্যাট করা হয়েছে কিনা এবং অন্যটি যাচাই করে যে ফাইলের ডেটা সঠিক এবং নিয়মিত (consistent) কিনা। Gson সরাসরি ইনটিগ্রিটি এবং কনসিস্টেন্সি চেকের জন্য কোন built-in ফিচার প্রদান না করলেও, আপনি কিছু প্রক্রিয়া ব্যবহার করে এই কাজটি করতে পারেন।
1. JSON ফাইলের Integrity চেক:
ফাইলের integrity চেক করতে, মূলত JSON ডেটার সঠিক ফরম্যাট যাচাই করা হয়। Gson লাইব্রেরি ব্যবহার করে আপনি সহজেই একটি JSON ফাইল লোড করতে পারেন এবং দেখতে পারেন এটি সঠিকভাবে ফরম্যাট করা হয়েছে কিনা। যদি JSON সঠিকভাবে ফরম্যাট না থাকে, তাহলে JsonSyntaxException এর মাধ্যমে একটি ত্রুটি তৈরি হবে।
উদাহরণ: JSON Integrity চেক করা
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import java.io.FileReader;
import java.io.IOException;
public class JSONIntegrityCheck {
public static void main(String[] args) {
String filePath = "path_to_your_json_file.json"; // JSON ফাইলের পথ
// Gson ইনস্ট্যান্স তৈরি
Gson gson = new Gson();
try (FileReader reader = new FileReader(filePath)) {
// JSON ফাইলটি পার্স করা হচ্ছে
gson.fromJson(reader, Object.class);
System.out.println("JSON integrity check passed. The file is valid.");
} catch (JsonSyntaxException e) {
// যদি JSON সঠিক না হয়
System.out.println("Invalid JSON format: " + e.getMessage());
} catch (IOException e) {
// ফাইল পড়ার ত্রুটি
System.out.println("Error reading the file: " + e.getMessage());
}
}
}
এখানে gson.fromJson() মেথড ব্যবহার করে JSON ফাইলটি পড়া হচ্ছে এবং যদি JSON সঠিক না হয়, তাহলে JsonSyntaxException ধরা পড়বে। যদি JSON ফাইলটি সঠিকভাবে ফরম্যাট করা থাকে, তাহলে ইন্টিগ্রিটি চেকটি পাস করবে।
2. JSON ফাইলের Consistency চেক:
Consistency চেকের মানে হলো ফাইলের ডেটা সঠিক এবং যুক্তিসঙ্গত কিনা। এটি সাধারণত ডেটার কাঠামো এবং এর মধ্যে সম্পর্ক যাচাই করা। যেমন, যদি আপনি একটি JSON ফাইলের মধ্যে কিছু প্রপার্টি আশা করেন (যেমন একটি "price" ফিল্ড একটি সংখ্যার মান ধারণ করবে), তবে আপনি ডেটার consistency চেক করতে পারেন।
উদাহরণ: JSON Consistency চেক করা
ধরা যাক, আমাদের একটি Product ক্লাস আছে যার মধ্যে name (String), price (Double) এবং quantity (Integer) ফিল্ড রয়েছে। আমরা চাই নিশ্চিত করতে যে price এবং quantity ফিল্ডগুলির মান সঠিক ধরণের।
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import java.io.FileReader;
import java.io.IOException;
class Product {
String name;
Double price;
Integer quantity;
// Constructor, getters, setters omitted for brevity
}
public class JSONConsistencyCheck {
public static void main(String[] args) {
String filePath = "path_to_your_json_file.json"; // JSON ফাইলের পথ
Gson gson = new Gson();
try (FileReader reader = new FileReader(filePath)) {
// JSON ফাইল পার্স করা হচ্ছে
JsonObject jsonObject = gson.fromJson(reader, JsonObject.class);
// Consistency চেক করা
if (jsonObject.has("name") && jsonObject.has("price") && jsonObject.has("quantity")) {
String name = jsonObject.get("name").getAsString();
double price = jsonObject.get("price").getAsDouble();
int quantity = jsonObject.get("quantity").getAsInt();
// যাচাই করা হচ্ছে যে price এবং quantity সঠিক ডেটার ধরণ ধারণ করছে
if (price >= 0 && quantity >= 0) {
System.out.println("JSON consistency check passed.");
System.out.println("Product Name: " + name);
System.out.println("Price: " + price);
System.out.println("Quantity: " + quantity);
} else {
System.out.println("Invalid data: Price and quantity must be non-negative.");
}
} else {
System.out.println("Missing required fields in the JSON.");
}
} catch (JsonSyntaxException e) {
// যদি JSON সঠিক না হয়
System.out.println("Invalid JSON format: " + e.getMessage());
} catch (IOException e) {
// ফাইল পড়ার ত্রুটি
System.out.println("Error reading the file: " + e.getMessage());
}
}
}
ব্যাখ্যা:
- Integrity চেক: প্রথমে
gson.fromJson()ব্যবহার করে JSON ফাইলটি পড়া হচ্ছে। যদি JSON ফাইলটি সঠিকভাবে ফরম্যাট করা না থাকে, তাহলে এটিJsonSyntaxExceptionপ্রদান করবে এবং আমরা সেটি কন্ট্রোল করতে পারব। - Consistency চেক: JSON অবজেক্টের মধ্যে নির্দিষ্ট ফিল্ডগুলির উপস্থিতি যাচাই করা হচ্ছে। তারপর,
priceএবংquantityফিল্ডের মানের ধরন এবং পরিসীমা চেক করা হচ্ছে (যেমন,priceএবংquantityনেতিবাচক সংখ্যা হতে পারবে না)।
3. JSON Validation for Integrity:
আপনি যদি JSON ডেটা স্ট্রাকচারের বৈধতা (validation) করতে চান, তখন একটি JSON Schema ব্যবহার করা যেতে পারে। এই ক্ষেত্রে, Gson নিজে JSON Schema যাচাইয়ের জন্য সরাসরি কোন সমর্থন প্রদান করে না, তবে আপনি json-schema-validator লাইব্রেরি ব্যবহার করে এটি করতে পারেন। এর মাধ্যমে JSON এর কাঠামো এবং ডেটা টাইপ যাচাই করা যেতে পারে।
JSON Schema Validation:
<dependency>
<groupId>com.github.fge</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.2.6</version>
</dependency>
সারাংশ:
- Integrity চেক: JSON ফাইলের ফরম্যাট সঠিক কিনা তা যাচাই করার জন্য
gson.fromJson()মেথড ব্যবহার করতে পারেন।JsonSyntaxExceptionত্রুটি দ্বারা আপনি JSON-এর সঠিকতা যাচাই করতে পারবেন। - Consistency চেক: JSON ডেটার ভিতরে নির্দিষ্ট ফিল্ডগুলির সঠিকতা এবং ডেটা টাইপ চেক করার জন্য আপনাকে কাস্টম চেক করতে হবে।
- Schema Validation: JSON ফাইলের কাঠামো ও বৈধতা চেক করার জন্য JSON Schema ব্যবহার করা যেতে পারে।
Gson নিজে JSON ডেটা এবং Java অবজেক্টের মধ্যে রূপান্তরের জন্য ডিজাইন করা হলেও, অনেক সময় আমরা JSON ডেটার বৈধতা (validation) নিশ্চিত করতে চাই। যেমন, JSON ডেটার ফর্ম্যাট, ডেটার ধরণ, প্রয়োজনীয় ফিল্ড ইত্যাদি যাচাই করা। এই ধরনের যাচাই করতে আপনি Third-party tools বা লাইব্রেরি ব্যবহার করতে পারেন।
এখানে আমরা দেখবো কিভাবে Gson-এর সাথে validation এর জন্য কিছু জনপ্রিয় third-party লাইব্রেরি (যেমন Hibernate Validator বা Jackson) ইন্টিগ্রেট করা যায়।
1. Hibernate Validator Integration with Gson
Hibernate Validator হলো একটি জনপ্রিয় validation লাইব্রেরি যা Java Bean Validation (JSR 303/380) স্পেসিফিকেশন অনুসরণ করে। Hibernate Validator কে Gson এর সাথে ব্যবহার করলে JSON ডেটার ভিতরে থাকা Java Beans-এর বৈধতা পরীক্ষা করা যায়।
উদাহরণ: Gson এর সাথে Hibernate Validator ইন্টিগ্রেশন
- Maven Dependency: প্রথমে আপনাকে আপনার প্রকল্পে Hibernate Validator এবং Gson-এর ডিপেনডেন্সি যোগ করতে হবে।
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.0.Final</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.0</version>
</dependency>
- Java Code: এখন আমরা Gson এবং Hibernate Validator একসাথে ব্যবহার করে JSON ডেটার বৈধতা যাচাই করবো।
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.constraints.Length;
import javax.validation.*;
import javax.validation.constraints.NotNull;
import java.util.Set;
class Person {
@NotNull(message = "Name cannot be null")
@Length(min = 3, message = "Name must be at least 3 characters")
String name;
@NotNull(message = "Age cannot be null")
Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
String json = "{\"name\":\"Jo\",\"age\":25}"; // Invalid name (length < 3)
// Gson object creation
Gson gson = new Gson();
// Deserialize the JSON to Person object
try {
Person person = gson.fromJson(json, Person.class);
// Initialize the validator factory
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// Validate the person object
Set<ConstraintViolation<Person>> violations = validator.validate(person);
if (!violations.isEmpty()) {
for (ConstraintViolation<Person> violation : violations) {
System.out.println(violation.getMessage());
}
} else {
System.out.println("Validation passed.");
}
} catch (JsonSyntaxException e) {
System.out.println("Invalid JSON format: " + e.getMessage());
}
}
}
আউটপুট:
Name must be at least 3 characters
ব্যাখ্যা:
- এখানে আমরা
Personক্লাসের মধ্যে কিছু Hibernate Validator এনোটেশন ব্যবহার করেছি যেমন@NotNullএবং@Length। gson.fromJson()দ্বারা JSON ডেটাকেPersonঅবজেক্টে রূপান্তর করার পর,Validatorএর মাধ্যমে বৈধতা যাচাই করা হয়েছে।- যদি JSON অবজেক্টটি সঠিক না হয়, তবে হাইবারনেট ভ্যালিডেটর সেই ত্রুটিগুলি প্রদর্শন করবে।
2. Jackson Validator Integration with Gson
Jackson হলো একটি JSON-এ কাজ করার জন্য আরেকটি জনপ্রিয় লাইব্রেরি, যা Gson-এর মতই JSON ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে ব্যবহৃত হয়। Jackson-এও Validation করা যায়।
উদাহরণ: Gson এর সাথে Jackson Validation ইন্টিগ্রেশন
- Maven Dependency:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
- Java Code: এবার আমরা Jackson এবং Gson এর সাহায্যে JSON ডেটার মধ্যে Validation প্রয়োগ করব।
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.exc.MismatchedInputException;
import com.google.gson.Gson;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Set;
class Person {
@NotNull(message = "Name is required")
@Size(min = 3, message = "Name should have at least 3 characters")
String name;
@NotNull(message = "Age is required")
Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
String json = "{\"name\":\"Jo\",\"age\":25}"; // Invalid name (length < 3)
// Gson Object creation for JSON parsing
Gson gson = new Gson();
try {
// Deserialize JSON into Person Object
Person person = gson.fromJson(json, Person.class);
// Hibernate Validator initialization
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// Validate Person object
Set<javax.validation.ConstraintViolation<Person>> violations = validator.validate(person);
if (!violations.isEmpty()) {
for (javax.validation.ConstraintViolation<Person> violation : violations) {
System.out.println(violation.getMessage());
}
} else {
System.out.println("Validation passed.");
}
} catch (MismatchedInputException e) {
System.out.println("Invalid JSON format: " + e.getMessage());
}
}
}
আউটপুট:
Name should have at least 3 characters
ব্যাখ্যা:
- Jackson এবং Gson উভয় ব্যবহার করে JSON ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হয়েছে।
- এখানে Jackson এর মাধ্যমে ObjectMapper ব্যবহার করা হয়েছে, এবং Gson এর মাধ্যমে validation করা হয়েছে।
3. Using JSON Schema Validation
আরেকটি উপায় JSON ডেটার বৈধতা যাচাই করার জন্য হলো JSON Schema ব্যবহার করা। এটি JSON ডেটার স্ট্রাকচার এবং কন্টেন্ট ভ্যালিডেট করার একটি শক্তিশালী পদ্ধতি। এই উদ্দেশ্যে everit-org/json-schema লাইব্রেরি ব্যবহার করা যায়।
উদাহরণ: JSON Schema Validation
- Maven Dependency:
<dependency>
<groupId>org.everit.json</groupId>
<artifactId>json-schema</artifactId>
<version>1.14.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
- Java Code:
import com.google.gson.Gson;
import org.everit.json.schema.Schema;
import org.everit.json.schema.loader.SchemaLoader;
import org.json.JSONObject;
import org.json.JSONTokener;
public class Main {
public static void main(String[] args) {
String json = "{\"name\":\"John\", \"age\":30}";
String schemaString = "{\n" +
" \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n" +
" \"type\": \"object\",\n" +
" \"properties\": {\n" +
" \"name\": { \"type\": \"string\" },\n" +
" \"age\": { \"type\": \"integer\" }\n" +
" },\n" +
" \"required\": [\"name\", \"age\"]\n" +
"}";
// Create a JSON object for the schema
JSONObject jsonSchema = new JSONObject(new JSONTokener(schemaString));
// Load the schema
Schema schema = SchemaLoader.load(jsonSchema);
// Create a JSON object to validate
JSONObject jsonObject = new JSONObject(json);
// Validate JSON object against the schema
try {
schema.validate(jsonObject);
System.out.println("JSON is valid according to the schema");
} catch (Exception e) {
System.out.println("JSON validation error: " + e.getMessage());
}
}
}
আউটপুট:
JSON is valid according to the schema
ব্যাখ্যা:
- এখানে JSON Schema ব্যবহার করে JSON ডেটা স্ট্রাকচার যাচাই করা হয়েছে। Schema নির্দিষ্ট করেছে যে
nameএবংageফিল্ড দুটি থাকতে হবে এবংnameফিল্ডটি string টাইপের এবংageফিল্ডটি integer টাইপের হতে হবে। - JSON Schema ত্রুটি শনাক্ত করলে, তা ব্যতিক্রমের মাধ্যমে জানানো হয়।
Validation JSON ডেটার জন্য গুরুত্বপূর্ণ, বিশেষ করে যখন আপনার ডেটা ভিন্ন সোর্স থেকে আসে এবং আপনি নিশ্চিত হতে চান যে এটি সঠিক ফরম্যাট এবং মানের। Gson এর সাথে third-party validation লাইব্রেরি যেমন Hibernate Validator, Jackson, এবং JSON Schema ব্যবহার করে আপনি সহজেই JSON ডেটার বৈধতা যাচাই করতে পারেন।
Read more