Skill

Gson এর সঙ্গে JSON Schema Validation

জিসন (Gson) - Java Technologies

454

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 সহ আরও অনেক বৈশিষ্ট্য অন্তর্ভুক্ত থাকে।
Content added By

JSON Schema Validation হলো একটি পদ্ধতি যা JSON ডেটার কাঠামো এবং কনটেন্ট যাচাই করতে ব্যবহৃত হয়। এটি একটি নির্দিষ্ট JSON object এর কাঠামো (structure) এবং মান (values) সঠিকভাবে গঠিত কি না তা যাচাই করে, যাতে আপনি নিশ্চিত হতে পারেন যে আপনার JSON ডেটা পূর্বনির্ধারিত শর্তাবলী অনুসরণ করছে। JSON Schema একটি ডকুমেন্টেশন বা স্কিমা যা JSON ডেটার জন্য বৈধ কাঠামো এবং মানের নিয়ম নির্ধারণ করে।

JSON Schema-এর সুবিধা:

  1. Data Integrity: এটি নিশ্চিত করে যে JSON ডেটা সঠিকভাবে ফরম্যাট করা হয়েছে এবং সমস্ত প্রয়োজনীয় ক্ষেত্রগুলি সঠিক টাইপের এবং সীমাবদ্ধতাগুলির মধ্যে পড়ে।
  2. Validation: JSON ডেটার ক্ষেত্রে ভুল টাইপ, অপর্যাপ্ত মান, বা অবাঞ্ছিত মান থাকা সমস্যাগুলি চিহ্নিত করা সহজ হয়।
  3. Interoperability: JSON স্কিমার মাধ্যমে বিভিন্ন সিস্টেম বা অ্যাপ্লিকেশন গুলি JSON ডেটা পার্স বা পাঠানোর সময় নির্দিষ্ট মানদণ্ড অনুসরণ করতে পারে।
  4. 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());
        }
    }
}

কোডের ব্যাখ্যা:

  1. JSON Schema Definition: আমরা একটি JSON স্কিমা ডিফাইন করেছি যেখানে কিছু প্রপার্টি এবং কনস্ট্রেইন্ট দেওয়া হয়েছে।
  2. Everit JSON Schema Loader: SchemaLoader.load() পদ্ধতির মাধ্যমে স্কিমাটি লোড করা হয় এবং Schema অবজেক্ট তৈরি করা হয়।
  3. JSON Object Validation: schema.validate() ব্যবহার করে JSON ডেটাকে স্কিমার সাথে যাচাই করা হয়।
  4. যদি JSON ডেটা স্কিমার সাথে মিলে, তাহলে "JSON is valid according to the schema" মেসেজটি প্রদর্শিত হবে। অন্যথায়, ValidationException ধরা পড়ে এবং ত্রুটির মেসেজ দেখানো হয়।

JSON Schema এর কিছু সাধারণ বৈশিষ্ট্য:

  1. type: JSON ডেটার টাইপ (যেমন, string, integer, object, ইত্যাদি)।
  2. properties: JSON অবজেক্টের বিভিন্ন প্রপার্টি বা ফিল্ড।
  3. required: যে প্রপার্টিগুলি অবশ্যই থাকা উচিত (যেমন, name, age)।
  4. minimum / maximum: সংখ্যার জন্য সীমাবদ্ধতা নির্ধারণ।
  5. format: নির্দিষ্ট ফরম্যাট (যেমন, email, date)।
  6. enum: নির্দিষ্ট মানের একটি তালিকা (যেমন, enum: ["small", "medium", "large"])।

JSON Schema Validation হল একটি গুরুত্বপূর্ণ প্রক্রিয়া যা JSON ডেটার কাঠামো এবং মান যাচাই করতে ব্যবহৃত হয়। Gson এর সাথে Everit JSON Schema লাইব্রেরি ব্যবহার করে আপনি সহজেই JSON ডেটা স্কিমা যাচাই করতে পারেন। এর মাধ্যমে আপনি আপনার JSON ডেটার সঠিকতা নিশ্চিত করতে পারবেন, যাতে ডেটা সঠিকভাবে প্রক্রিয়া এবং ব্যবহার করা যায়।

Content added By

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 + "'}";
    }
}

ব্যাখ্যা:

  1. Everit JSON Schema লাইব্রেরি ব্যবহার করে আমরা প্রথমে JSON স্কিমা লোড করেছি।
  2. স্কিমা লোড করার পর, schema.validate(jsonSubject) ব্যবহার করে JSON ডেটার ভ্যালিডেশন করা হয়েছে।
  3. যদি JSON ডেটা স্কিমার সাথে মিলে যায়, তাহলে এটি valid বলে গণ্য হবে এবং Gson দিয়ে JSON ডেটা ডেসিরিয়ালাইজ করা হবে।
  4. যদি JSON ডেটার কোনো ত্রুটি থাকে, তবে এটি invalid বলে রিপোর্ট করা হবে।
  5. 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 স্কিমা ব্যবহার করে ডেটার ভ্যালিডেশন কার্যকরভাবে করতে পারেন।

Content added By

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());
        }
    }
}

ব্যাখ্যা:

  1. Integrity চেক: প্রথমে gson.fromJson() ব্যবহার করে JSON ফাইলটি পড়া হচ্ছে। যদি JSON ফাইলটি সঠিকভাবে ফরম্যাট করা না থাকে, তাহলে এটি JsonSyntaxException প্রদান করবে এবং আমরা সেটি কন্ট্রোল করতে পারব।
  2. 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 ব্যবহার করা যেতে পারে।
Content added By

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 ইন্টিগ্রেশন

  1. 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>
  1. 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 ইন্টিগ্রেশন

  1. 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>
  1. 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

  1. 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>
  1. 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 ডেটার বৈধতা যাচাই করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...