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
ব্যাখ্যা:
PersonSerializer:JsonSerializerইন্টারফেস ইমপ্লিমেন্ট করে কাস্টম কনভার্সন লজিক তৈরি করা হয়েছে, যেখানেPersonঅবজেক্টটি JSON এ কনভার্ট করার সময় কাস্টম প্রপার্টি নাম ব্যবহার করা হয়েছে।PersonDeserializer:JsonDeserializerইন্টারফেস ইমপ্লিমেন্ট করে JSON থেকেPersonঅবজেক্টে রূপান্তরের কাস্টম লজিক তৈরি করা হয়েছে।
@SerializedNameঅ্যানোটেশন ব্যবহার করে JSON প্রপার্টির নাম কাস্টমাইজ করতে পারবেন।JsonSerializerএবংJsonDeserializerব্যবহার করে আপনি কাস্টম অবজেক্ট ম্যাপিং করতে পারেন, যেমন JSON এর বিশেষ ফরম্যাটে অবজেক্টের কনভার্সন।
এভাবে Gson আপনাকে JSON কাস্টমাইজেশন এবং অবজেক্ট ম্যাপিংয়ের ব্যাপারে অনেক সুবিধা প্রদান করে।
Read more