Skill

Gson এর মাধ্যমে কাস্টম Serialization এবং Deserialization

জিসন (Gson) - Java Technologies

352

Gson লাইব্রেরি আপনাকে কাস্টম Serialization (Java অবজেক্ট থেকে JSON এ রূপান্তর) এবং Deserialization (JSON থেকে Java অবজেক্টে রূপান্তর) করতে সহায়তা করে। এই প্রক্রিয়াগুলি খুবই শক্তিশালী, এবং যখন আপনি JSON ডেটা বা Java অবজেক্টের জন্য ডিফল্ট রূপান্তর চাহিদার বাইরে কিছু করতে চান, তখন কাস্টম Serialization এবং Deserialization ব্যবহার করা হয়।

নিচে Gson এর মাধ্যমে কাস্টম Serialization এবং Deserialization করার পদ্ধতি আলোচনা করা হয়েছে।


1. কাস্টম Serialization (Java Object থেকে JSON)

Serialization বা "Java Object থেকে JSON এ রূপান্তর" প্রক্রিয়ায়, আপনি Java ক্লাসের ফিল্ডগুলির জন্য কাস্টম নিয়ম ব্যবহার করতে পারেন। এটি করতে হলে JsonSerializer ইন্টারফেস ব্যবহার করতে হয়।

উদাহরণ: কাস্টম Serialization

ধরা যাক, আপনার একটি User ক্লাস আছে এবং আপনি শুধু নির্দিষ্ট কিছু ফিল্ড JSON এ চান বা কিছু কাস্টম ফরম্যাটে JSON দেখতে চান।

Java Class (User):

class User {
    String name;
    int age;
    String email;

    public User(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }
}

Custom Serializer:

import com.google.gson.*;
import java.lang.reflect.Type;

class UserSerializer implements JsonSerializer<User> {
    @Override
    public JsonElement serialize(User user, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("username", user.name); // Customize key
        jsonObject.addProperty("user_age", user.age);  // Customize key
        jsonObject.addProperty("email_address", user.email);  // Customize key
        return jsonObject;
    }
}

Java Code (Using Custom Serializer):

import com.google.gson.*;

public class Main {
    public static void main(String[] args) {
        User user = new User("Rahim", 30, "rahim@example.com");
        
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(User.class, new UserSerializer());
        Gson gson = gsonBuilder.create();

        // Custom Serialization
        String json = gson.toJson(user);
        System.out.println(json);
    }
}

আউটপুট:

{
  "username": "Rahim",
  "user_age": 30,
  "email_address": "rahim@example.com"
}

এখানে, আমরা User অবজেক্টটি JSON-এ কাস্টম ফরম্যাটে রূপান্তরিত করেছি। name, age, এবং email এর পরিবর্তে কাস্টম কী (username, user_age, email_address) ব্যবহার করা হয়েছে।


2. কাস্টম Deserialization (JSON থেকে Java Object)

Deserialization বা "JSON থেকে Java Object এ রূপান্তর" প্রক্রিয়ায়, আপনি JSON ডেটার কাঠামো অনুযায়ী কাস্টম নিয়ম নির্ধারণ করতে পারেন। এটি করতে হলে JsonDeserializer ইন্টারফেস ব্যবহার করা হয়।

উদাহরণ: কাস্টম Deserialization

ধরা যাক, JSON ডেটার মধ্যে কিছু ক্ষেত্রের নাম পরিবর্তন করা হয়েছে, বা JSON এর কাঠামো কিছুটা ভিন্ন, তখন আপনি কাস্টম ডেসেরিয়ালাইজার ব্যবহার করতে পারেন।

JSON (Customized):

{
  "username": "Rahim",
  "user_age": 30,
  "email_address": "rahim@example.com"
}

Java Class (User):

class User {
    String name;
    int age;
    String email;

    public User(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + ", email='" + email + "'}";
    }
}

Custom Deserializer:

import com.google.gson.*;
import java.lang.reflect.Type;

class UserDeserializer implements JsonDeserializer<User> {
    @Override
    public User deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();
        String name = jsonObject.get("username").getAsString();  // Custom field name
        int age = jsonObject.get("user_age").getAsInt();         // Custom field name
        String email = jsonObject.get("email_address").getAsString(); // Custom field name
        return new User(name, age, email);
    }
}

Java Code (Using Custom Deserializer):

import com.google.gson.*;

public class Main {
    public static void main(String[] args) {
        String json = "{\"username\":\"Rahim\",\"user_age\":30,\"email_address\":\"rahim@example.com\"}";
        
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(User.class, new UserDeserializer());
        Gson gson = gsonBuilder.create();

        // Custom Deserialization
        User user = gson.fromJson(json, User.class);
        System.out.println(user);
    }
}

আউটপুট:

User{name='Rahim', age=30, email='rahim@example.com'}

এখানে, আমরা JSON ডেটা যা username, user_age, email_address নামে ফিল্ড ধারণ করে, সেটিকে User ক্লাসের ফিল্ডগুলির সঙ্গে মেলানো হয়েছে। Gson আমাদের কাস্টম ডেসেরিয়ালাইজার ব্যবহার করে JSON ডেটাকে সঠিক Java অবজেক্টে রূপান্তরিত করেছে।


3. কাস্টম Serialization এবং Deserialization একসাথে

অনেক সময় একই অবজেক্টের জন্য Serialization এবং Deserialization উভয় প্রক্রিয়াতেই কাস্টম রূপান্তর করা প্রয়োজন হয়। আপনি Gson এর GsonBuilder ব্যবহার করে এই দুটি কাস্টমাইজেশন একসাথে করতে পারেন।

উদাহরণ: Serialization এবং Deserialization একসাথে কাস্টমাইজ করা

Java Code (Using Both Custom Serializer and Deserializer):

import com.google.gson.*;

public class Main {
    public static void main(String[] args) {
        User user = new User("Rahim", 30, "rahim@example.com");
        
        // Register both custom serializer and deserializer
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(User.class, new UserSerializer());
        gsonBuilder.registerTypeAdapter(User.class, new UserDeserializer());
        Gson gson = gsonBuilder.create();

        // Custom Serialization
        String json = gson.toJson(user);
        System.out.println("Serialized JSON: " + json);

        // Custom Deserialization
        User deserializedUser = gson.fromJson(json, User.class);
        System.out.println("Deserialized User: " + deserializedUser);
    }
}

আউটপুট:

Serialized JSON: {"username":"Rahim","user_age":30,"email_address":"rahim@example.com"}
Deserialized User: User{name='Rahim', age=30, email='rahim@example.com'}

সারাংশ:

  • কাস্টম Serialization: JsonSerializer ইন্টারফেস ব্যবহার করে Java অবজেক্ট থেকে JSON তৈরি করার সময় কাস্টম ফিল্ড নাম এবং কাঠামো নির্ধারণ করা যায়।
  • কাস্টম Deserialization: JsonDeserializer ইন্টারফেস ব্যবহার করে JSON থেকে Java অবজেক্টে রূপান্তর করার সময় কাস্টম ফিল্ড নাম এবং কাঠামো নির্ধারণ করা যায়।
  • GsonBuilder: GsonBuilder এর মাধ্যমে কাস্টম Serializer এবং Deserializer একত্রে নিবন্ধিত করা যায়।

Gson এর এই কাস্টম Serialization এবং Deserialization বৈশিষ্ট্যগুলি JSON এবং Java অবজেক্টের মধ্যকার রূপান্তরকে আরও লचीলা এবং শক্তিশালী করে তোলে।

Content added By

Gson-এ Custom Serializer এবং Custom Deserializer তৈরি করার মাধ্যমে আপনি Java Object এবং JSON এর মধ্যে কাস্টম রূপান্তর পরিচালনা করতে পারেন। এতে আপনি বিশেষ ক্ষেত্রগুলোর জন্য JSON স্ট্রিং গঠন করতে বা নির্দিষ্ট JSON ডেটা থেকে Java অবজেক্টে রূপান্তর করতে পারবেন।

নিচে Gson ব্যবহার করে Custom Serializer এবং Custom Deserializer তৈরি করার পদ্ধতি বর্ণনা করা হলো:


Custom Serializer তৈরি করা

Custom Serializer দিয়ে আপনি JSON রূপান্তরের সময় একটি নির্দিষ্ট ফিল্ড বা অবজেক্টের কাস্টম রূপান্তর করতে পারেন।

ধাপ ১: Custom Serializer ক্লাস তৈরি করা

ধরা যাক, আমাদের একটি Person ক্লাস আছে, যেখানে birthDate একটি Date টাইপ ফিল্ড। আমরা Date ফিল্ডটিকে একটি নির্দিষ্ট ফরম্যাটে সিরিয়ালাইজ করতে চাই।

import com.google.gson.*;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;

class Person {
    String name;
    Date birthDate;

    // কন্সট্রাকটর
    public Person(String name, Date birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }
}

class PersonSerializer implements JsonSerializer<Person> {
    @Override
    public JsonElement serialize(Person person, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject jsonObject = new JsonObject();

        // নাম সোজাসুজি JSON এ
        jsonObject.addProperty("name", person.name);

        // birthDate কাস্টম ফরম্যাটে
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = sdf.format(person.birthDate);
        jsonObject.addProperty("birthDate", formattedDate);

        return jsonObject;
    }
}

ধাপ ২: Gson এ Custom Serializer ব্যবহার করা

এখন, PersonSerializer ব্যবহার করে Person অবজেক্টটি সিরিয়ালাইজ করা হবে।

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        // একটি Person অবজেক্ট তৈরি করুন
        Person person = new Person("John Doe", new Date());

        // GsonBuilder ব্যবহার করে কাস্টম Serializer নিবন্ধিত করুন
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Person.class, new PersonSerializer())
                        .create();

        // Person অবজেক্টকে JSON এ রূপান্তর করুন
        String json = gson.toJson(person);

        // JSON স্ট্রিং প্রিন্ট করুন
        System.out.println("JSON Representation: " + json);
    }
}

আউটপুট:

JSON Representation: {"name":"John Doe","birthDate":"2024-12-19"}

এখানে birthDate ফিল্ডটি কাস্টম ফরম্যাটে "yyyy-MM-dd" ফরম্যাটে সিরিয়ালাইজ হয়েছে।


Custom Deserializer তৈরি করা

Custom Deserializer দিয়ে আপনি JSON থেকে Java Object এ কাস্টম রূপান্তর করতে পারবেন।

ধাপ ১: Custom Deserializer ক্লাস তৈরি করা

ধরা যাক, আমরা আগের Person ক্লাসের জন্য birthDate ফিল্ডের JSON এ একটি স্ট্রিং পাব, এবং এই স্ট্রিংটিকে Date টাইপে রূপান্তর করতে হবে।

import com.google.gson.*;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;

class PersonDeserializer implements JsonDeserializer<Person> {
    @Override
    public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();

        // name এবং birthDate পড়ুন
        String name = jsonObject.get("name").getAsString();
        String birthDateString = jsonObject.get("birthDate").getAsString();

        // birthDate স্ট্রিং থেকে Date টাইপে রূপান্তর করুন
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birthDate = null;
        try {
            birthDate = sdf.parse(birthDateString);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Person অবজেক্ট তৈরি করুন
        return new Person(name, birthDate);
    }
}

ধাপ ২: Gson এ Custom Deserializer ব্যবহার করা

এখন, PersonDeserializer ব্যবহার করে JSON স্ট্রিং থেকে Person অবজেক্টে রূপান্তর করা হবে।

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    public static void main(String[] args) {
        // JSON স্ট্রিং
        String json = "{\"name\":\"John Doe\",\"birthDate\":\"2024-12-19\"}";

        // GsonBuilder ব্যবহার করে কাস্টম Deserializer নিবন্ধিত করুন
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Person.class, new PersonDeserializer())
                        .create();

        // JSON স্ট্রিং থেকে Person অবজেক্টে রূপান্তর করুন
        Person person = gson.fromJson(json, Person.class);

        // Person অবজেক্টের মান প্রিন্ট করুন
        System.out.println("Name: " + person.name);
        System.out.println("BirthDate: " + person.birthDate);
    }
}

আউটপুট:

Name: John Doe
BirthDate: Wed Dec 19 00:00:00 UTC 2024

এখানে birthDate স্ট্রিং "2024-12-19" থেকে Date অবজেক্টে কাস্টম ডেসিরিয়ালাইজড হয়েছে।


সারসংক্ষেপ:

  1. Custom Serializer: Java Object থেকে JSON এ কাস্টম রূপান্তরের জন্য JsonSerializer ইন্টারফেস ইমপ্লিমেন্ট করুন।
  2. Custom Deserializer: JSON থেকে Java Object এ কাস্টম রূপান্তরের জন্য JsonDeserializer ইন্টারফেস ইমপ্লিমেন্ট করুন।
  3. GsonBuilder: Gson এ কাস্টম serializer এবং deserializer নিবন্ধিত করতে GsonBuilder ব্যবহার করুন।

এভাবে আপনি Gson ব্যবহার করে JSON রূপান্তরের প্রক্রিয়াকে আরও কাস্টমাইজ করতে পারেন, যা বিশেষ প্রয়োজনের জন্য উপকারী হতে পারে।

Content added By

Gson-এ @JsonAdapter অ্যানোটেশনটি ব্যবহার করা হয় বিশেষ কাস্টম কনভার্সন লজিক নির্ধারণ করতে, যা Gson JSON পার্সিং এবং সিরিয়ালাইজেশনের জন্য ব্যবহার করতে পারে। এটি সাধারণত কাস্টম সেরিয়ালাইজার বা ডেসিরিয়ালাইজারের সাথে কাজ করার জন্য ব্যবহৃত হয়, যেমন কোনো ফিল্ড বা অবজেক্টের জন্য বিশেষ কাস্টম কনভার্সন রুল প্রয়োজন হলে।

কাস্টম সেরিয়ালাইজার এবং ডেসিরিয়ালাইজার

ধরা যাক, আমাদের একটি Person অবজেক্ট আছে, যেখানে জন্মতারিখ একটি Date টাইপের ফিল্ড হিসেবে থাকে। যদি আমরা সেই Date টাইপকে বিশেষ কোন ফরম্যাটে JSON এ কনভার্ট করতে চাই, তবে আমরা @JsonAdapter ব্যবহার করতে পারি।

1. DateAdapter কাস্টম সেরিয়ালাইজার এবং ডেসিরিয়ালাইজার

উদাহরণ:

import com.google.gson.*;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;

// কাস্টম সেরিয়ালাইজার
class DateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> {
    private static final String DATE_FORMAT = "yyyy-MM-dd"; // কাস্টম ফরম্যাট

    @Override
    public JsonElement serialize(Date date, Type typeOfSrc, JsonSerializationContext context) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        return new JsonPrimitive(sdf.format(date)); // কাস্টম ফরম্যাটে Date সিরিয়ালাইজ করা
    }

    @Override
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        try {
            return sdf.parse(json.getAsString()); // JSON String থেকে Date পসা করা
        } catch (Exception e) {
            throw new JsonParseException("Invalid date format", e);
        }
    }
}

class Person {
    private String name;
    private Date birthDate;

    // Constructor
    public Person(String name, Date birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }

    // Getter methods
    public String getName() {
        return name;
    }

    public Date getBirthDate() {
        return birthDate;
    }
}

public class Main {
    public static void main(String[] args) {
        // Gson এর মধ্যে কাস্টম সেরিয়ালাইজার এবং ডেসিরিয়ালাইজার সংযুক্ত করা
        Gson gson = new GsonBuilder()
                .registerTypeAdapter(Date.class, new DateAdapter()) // DateAdapter কাস্টম অ্যাডাপ্টার ব্যবহার
                .create();

        // Java Object তৈরি করা
        Person person = new Person("John Doe", new Date());

        // Java Object কে JSON এ কনভার্ট করা
        String json = gson.toJson(person);
        System.out.println("Serialized JSON: " + json);

        // JSON কে Java Object এ কনভার্ট করা
        Person personFromJson = gson.fromJson(json, Person.class);
        System.out.println("Deserialized Person: " + personFromJson.getName() + ", Birth Date: " + personFromJson.getBirthDate());
    }
}

ব্যাখ্যা:

  1. কাস্টম সেরিয়ালাইজার (DateAdapter):
    • serialize() মেথড ব্যবহার করে Date অবজেক্টকে কাস্টম ফরম্যাটে JSON এ কনভার্ট করা হয়েছে।
    • deserialize() মেথড JSON থেকে Date অবজেক্টে কনভার্ট করার জন্য ব্যবহৃত হয়েছে।
  2. GsonBuilder:
    • registerTypeAdapter(Date.class, new DateAdapter()): এটি Date টাইপের জন্য কাস্টম DateAdapter অ্যাডাপ্টার ব্যবহার করে।

2. @JsonAdapter অ্যানোটেশন ব্যবহার:

Gson এর @JsonAdapter অ্যানোটেশনটি সরাসরি ক্লাসে ব্যবহার করা যেতে পারে, যেন আপনি নির্দিষ্ট কোনো ক্লাসের জন্য কাস্টম সেরিয়ালাইজার বা ডেসিরিয়ালাইজার সরাসরি অ্যাসাইন করতে পারেন।

উদাহরণ:

import com.google.gson.*;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;

// কাস্টম সেরিয়ালাইজার
class DateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> {
    private static final String DATE_FORMAT = "yyyy-MM-dd";

    @Override
    public JsonElement serialize(Date date, Type typeOfSrc, JsonSerializationContext context) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        return new JsonPrimitive(sdf.format(date));
    }

    @Override
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        try {
            return sdf.parse(json.getAsString());
        } catch (Exception e) {
            throw new JsonParseException("Invalid date format", e);
        }
    }
}

// কাস্টম অ্যানোটেশন ব্যবহার
@JsonAdapter(DateAdapter.class)
class Person {
    private String name;
    private Date birthDate;

    public Person(String name, Date birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }

    public String getName() {
        return name;
    }

    public Date getBirthDate() {
        return birthDate;
    }
}

public class Main {
    public static void main(String[] args) {
        // Gson তৈরি করা
        Gson gson = new Gson();

        // Java Object তৈরি করা
        Person person = new Person("John Doe", new Date());

        // Java Object কে JSON এ কনভার্ট করা
        String json = gson.toJson(person);
        System.out.println("Serialized JSON: " + json);

        // JSON থেকে Java Object এ কনভার্ট করা
        Person personFromJson = gson.fromJson(json, Person.class);
        System.out.println("Deserialized Person: " + personFromJson.getName() + ", Birth Date: " + personFromJson.getBirthDate());
    }
}

ব্যাখ্যা:

  • এখানে Person ক্লাসের উপরে @JsonAdapter(DateAdapter.class) অ্যানোটেশন ব্যবহার করা হয়েছে, যা Date টাইপের জন্য কাস্টম DateAdapter অ্যাডাপ্টার ব্যবহার করবে।

আউটপুট:

Serialized JSON: {"name":"John Doe","birthDate":"2024-12-19"}
Deserialized Person: John Doe, Birth Date: Wed Dec 19 14:56:34 UTC 2024
  • @JsonAdapter অ্যানোটেশনটি ক্লাস বা ফিল্ডের জন্য কাস্টম সেরিয়ালাইজার বা ডেসিরিয়ালাইজার অ্যাসাইন করতে ব্যবহৃত হয়।
  • JsonAdapter এবং GsonBuilder এর মাধ্যমে আপনার নিজস্ব কাস্টম কনভার্সন লজিক প্রয়োগ করতে পারেন।
Content added By

Gson লাইব্রেরি দিয়ে JSON প্রপার্টি কাস্টমাইজেশন এবং কাস্টম অবজেক্ট ম্যাপিং করতে হলে কিছু বিশেষ কৌশল ব্যবহার করতে হয়। সাধারণত, Gson ডিফল্টভাবে Java অবজেক্টের প্রপার্টির নাম এবং JSON ফিল্ডের নাম একে অপরের সাথে মেলাতে চেষ্টা করে, কিন্তু মাঝে মাঝে আপনি কাস্টম নাম এবং কাস্টম ম্যাপিং চাচ্ছেন, তখন Gson এই ধরনের কাস্টমাইজেশন সাপোর্ট করে।

1. JSON Property কাস্টমাইজেশন: @SerializedName অ্যানোটেশন

@SerializedName অ্যানোটেশন ব্যবহার করে আপনি Java ক্লাসের ফিল্ডের নাম এবং JSON প্রপার্টির নামের মধ্যে কাস্টম ম্যাপিং করতে পারেন।

উদাহরণ:

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;

class Person {
    @SerializedName("full_name") // JSON এর 'full_name' এর সাথে 'name' কে ম্যাপ করবে
    String name;

    @SerializedName("age_in_years") // JSON এর 'age_in_years' এর সাথে 'age' কে ম্যাপ করবে
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class GsonExample {
    public static void main(String[] args) {
        Person person = new Person("John Doe", 25);

        // Gson অবজেক্ট তৈরি করা
        Gson gson = new Gson();

        // Person অবজেক্টটি JSON এ কনভার্ট করা
        String json = gson.toJson(person);

        // JSON আউটপুট প্রিন্ট করা
        System.out.println(json);
    }
}

আউটপুট:

{"full_name":"John Doe","age_in_years":25}

এখানে @SerializedName অ্যানোটেশনটি ব্যবহার করে JSON প্রপার্টির নাম কাস্টমাইজ করা হয়েছে। name ফিল্ডটি JSON এর full_name এর সাথে এবং age ফিল্ডটি age_in_years এর সাথে ম্যাপ হয়েছে।

2. কাস্টম Object Mapping: JsonDeserializer এবং JsonSerializer

Gson ব্যবহার করে কাস্টম অবজেক্ট ম্যাপিং করতে হলে আপনি JsonDeserializer এবং JsonSerializer ইন্টারফেসগুলো ব্যবহার করতে পারেন। এগুলো আপনাকে JSON কনভার্সন প্রক্রিয়ায় কাস্টম লজিক প্রয়োগ করতে দেয়।

উদাহরণ:

এখানে একটি কাস্টম Person অবজেক্টকে JSON এ কনভার্ট এবং JSON থেকে অবজেক্টে রূপান্তর করতে কাস্টম JsonSerializer এবং JsonDeserializer ব্যবহার করা হয়েছে।

import com.google.gson.*;
import java.lang.reflect.Type;

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

class PersonSerializer implements JsonSerializer<Person> {
    @Override
    public JsonElement serialize(Person person, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("full_name", person.name);
        jsonObject.addProperty("age_in_years", person.age);
        return jsonObject;
    }
}

class PersonDeserializer implements JsonDeserializer<Person> {
    @Override
    public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();
        String name = jsonObject.get("full_name").getAsString();
        int age = jsonObject.get("age_in_years").getAsInt();
        return new Person(name, age);
    }
}

public class GsonCustomExample {
    public static void main(String[] args) {
        // GsonBuilder দিয়ে কাস্টম Serializer এবং Deserializer সেট করা
        Gson gson = new GsonBuilder()
                .registerTypeAdapter(Person.class, new PersonSerializer())
                .registerTypeAdapter(Person.class, new PersonDeserializer())
                .create();

        // Person অবজেক্ট তৈরি করা
        Person person = new Person("Jane Doe", 30);

        // Person অবজেক্টকে JSON এ কনভার্ট করা
        String json = gson.toJson(person);
        System.out.println("JSON Output: " + json);

        // JSON থেকে Person অবজেক্টে রূপান্তর করা
        Person deserializedPerson = gson.fromJson(json, Person.class);
        System.out.println("Deserialized Person: " + deserializedPerson.name + ", " + deserializedPerson.age);
    }
}

আউটপুট:

JSON Output: {"full_name":"Jane Doe","age_in_years":30}
Deserialized Person: Jane Doe, 30

ব্যাখ্যা:

  1. PersonSerializer: JsonSerializer ইন্টারফেস ইমপ্লিমেন্ট করে কাস্টম কনভার্সন লজিক তৈরি করা হয়েছে, যেখানে Person অবজেক্টটি JSON এ কনভার্ট করার সময় কাস্টম প্রপার্টি নাম ব্যবহার করা হয়েছে।
  2. PersonDeserializer: JsonDeserializer ইন্টারফেস ইমপ্লিমেন্ট করে JSON থেকে Person অবজেক্টে রূপান্তরের কাস্টম লজিক তৈরি করা হয়েছে।
  • @SerializedName অ্যানোটেশন ব্যবহার করে JSON প্রপার্টির নাম কাস্টমাইজ করতে পারবেন।
  • JsonSerializer এবং JsonDeserializer ব্যবহার করে আপনি কাস্টম অবজেক্ট ম্যাপিং করতে পারেন, যেমন JSON এর বিশেষ ফরম্যাটে অবজেক্টের কনভার্সন।

এভাবে Gson আপনাকে JSON কাস্টমাইজেশন এবং অবজেক্ট ম্যাপিংয়ের ব্যাপারে অনেক সুবিধা প্রদান করে।

Content added By

যদি আপনার Complex Data Structure থাকে এবং আপনি Gson দিয়ে JSON এ কনভার্ট করতে চান, তবে কখনও কখনও আপনাকে Custom Serialization এবং Deserialization মেথড ব্যবহার করতে হতে পারে। এর জন্য Gson আপনাকে JsonSerializer এবং JsonDeserializer ইন্টারফেস প্রদান করে, যা আপনাকে কাস্টম রূপান্তর করতে সাহায্য করে।

নিচে Complex Data Structure এর জন্য কাস্টম মেথডের উদাহরণ দেয়া হলো।

উদাহরণ:

ধরা যাক, আপনার একটি Person ক্লাস আছে, যেখানে Address নামে একটি অবজেক্ট রয়েছে। আপনাকে JSON এ কনভার্ট করার সময় কাস্টম লজিক ব্যবহার করতে হবে।

1. Custom Serialization (Object to JSON)

এখানে আমরা একটি Person ক্লাসের জন্য কাস্টম Serialization দেখাবো, যেখানে Address ফিল্ডটি একটি নির্দিষ্ট ফরম্যাটে JSON এ কনভার্ট হবে।

Address এবং Person ক্লাস:

public class Address {
    private String city;
    private String street;

    // Constructor, getters and setters
    public Address(String city, String street) {
        this.city = city;
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }
}

public class Person {
    private String name;
    private int age;
    private Address address;

    // Constructor, getters and setters
    public Person(String name, int age, Address address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    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 Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

2. Custom Serializer তৈরি করা

এখন আমরা Address অবজেক্টের জন্য কাস্টম Serialization তৈরি করব, যেখানে Address এর city এবং street ফিল্ড গুলি একটি কাস্টম ফরম্যাটে JSON এ রূপান্তর হবে।

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

import java.lang.reflect.Type;

public class AddressSerializer implements JsonSerializer<Address> {
    @Override
    public JsonElement serialize(Address address, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject addressJson = new JsonObject();
        addressJson.addProperty("fullAddress", address.getStreet() + ", " + address.getCity());
        return addressJson;
    }
}

এখানে AddressSerializer কাস্টম মেথড ব্যবহার করা হচ্ছে যাতে Address কে JSON এ কনভার্ট করার সময় street এবং city কে একত্রে fullAddress হিসেবে প্রেরণ করা হয়।

3. GsonBuilder ব্যবহার করে কাস্টম Serializer রেজিস্টার করা

এখন, আমরা GsonBuilder ব্যবহার করে এই কাস্টম Serializer রেজিস্টার করব এবং Person অবজেক্ট JSON এ কনভার্ট করব।

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    public static void main(String[] args) {
        // Address অবজেক্ট তৈরি করা
        Address address = new Address("New York", "5th Avenue");

        // Person অবজেক্ট তৈরি করা
        Person person = new Person("John Doe", 30, address);

        // GsonBuilder ব্যবহার করে কাস্টম Serializer রেজিস্টার করা
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(Address.class, new AddressSerializer());
        Gson gson = gsonBuilder.create();

        // Person অবজেক্ট JSON এ কনভার্ট করা
        String json = gson.toJson(person);

        // JSON আউটপুট প্রিন্ট করা
        System.out.println(json);
    }
}

আউটপুট:

{
  "name": "John Doe",
  "age": 30,
  "address": {
    "fullAddress": "5th Avenue, New York"
  }
}

4. Custom Deserialization (JSON to Object)

এখন, ধরুন আপনি JSON থেকে Address এবং Person অবজেক্টে কনভার্ট করতে চান, কিন্তু কিছু কাস্টম ফরম্যাটে (যেমন, fullAddress থেকে street এবং city আলাদা করতে)।

কাস্টম Deserializer তৈরি করা:

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;

import java.lang.reflect.Type;

public class AddressDeserializer implements JsonDeserializer<Address> {
    @Override
    public Address deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
        JsonObject jsonObject = json.getAsJsonObject();
        String fullAddress = jsonObject.get("fullAddress").getAsString();
        String[] addressParts = fullAddress.split(", ");

        // City এবং Street আলাদা করে Address অবজেক্টে সেট করা
        return new Address(addressParts[1], addressParts[0]);
    }
}

GsonBuilder দিয়ে কাস্টম Deserializer রেজিস্টার করা:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    public static void main(String[] args) {
        // JSON স্ট্রিং তৈরি করা
        String json = "{\"name\":\"John Doe\",\"age\":30,\"address\":{\"fullAddress\":\"5th Avenue, New York\"}}";

        // GsonBuilder দিয়ে কাস্টম Deserializer রেজিস্টার করা
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(Address.class, new AddressDeserializer());
        Gson gson = gsonBuilder.create();

        // JSON কে Person অবজেক্টে কনভার্ট করা
        Person person = gson.fromJson(json, Person.class);

        // Person অবজেক্ট প্রিন্ট করা
        System.out.println(person.getName());
        System.out.println(person.getAddress().getStreet());
        System.out.println(person.getAddress().getCity());
    }
}

আউটপুট:

John Doe
5th Avenue
New York
  • Custom Serialization এবং Deserialization Gson-এ ব্যবহার করে আপনি খুব সহজে Complex Data Structures কে JSON-এ কনভার্ট করতে পারেন অথবা JSON থেকে Objects এ কনভার্ট করতে পারেন।
  • আপনি JsonSerializer এবং JsonDeserializer ইন্টারফেস ব্যবহার করে কাস্টম লজিক প্রয়োগ করতে পারবেন যা আপনার প্রয়োজনে যথাযথভাবে কাজ করবে।
Content added By
Promotion

Are you sure to start over?

Loading...