বুন (Boon) লাইব্রেরি JSON পার্সিং এবং ম্যানিপুলেশনের জন্য একটি দ্রুত এবং কার্যকরী টুল, যা ডেভেলপারদের জন্য JSON ডেটা প্রক্রিয়া করা সহজ করে তোলে। সাধারণভাবে, বুন লাইব্রেরি ডিফল্ট ডেসিরিয়ালাইজেশন প্রক্রিয়া ব্যবহার করে JSON ডেটাকে POJO অবজেক্টে রূপান্তর করে। তবে, যদি আপনার কোনো বিশেষ কাস্টম ডেসিরিয়ালাইজেশন লজিক প্রয়োজন হয়, তাহলে আপনি Custom Deserializer তৈরি করতে পারেন।
Custom Deserializer তৈরি করার মাধ্যমে আপনি JSON ডেটার কিছু নির্দিষ্ট ফরম্যাট বা কনভার্শন কাস্টমাইজ করতে পারবেন, যেমন কোনো বিশেষ ফিল্ডের জন্য একটি নির্দিষ্ট রূপান্তর প্রক্রিয়া প্রয়োগ করা।
এখানে কাস্টম ডেসিরিয়ালাইজার তৈরি করার প্রক্রিয়া বিস্তারিতভাবে ব্যাখ্যা করা হলো।
1. Custom Deserializer তৈরি করার জন্য Steps
কাস্টম ডেসিরিয়ালাইজার তৈরি করতে, বুন লাইব্রেরিতে একটি কাস্টম ক্লাস তৈরি করতে হবে যা JSON ডেটাকে আপনার নির্দিষ্ট লজিক অনুসারে POJO অবজেক্টে রূপান্তর করবে। আপনি BoonDeserializer অথবা একটি সাধারণ Java ক্লাস ব্যবহার করে কাস্টম ডেসিরিয়ালাইজার তৈরি করতে পারেন।
2. Custom Deserializer Example
ধরা যাক, আমাদের একটি Person ক্লাস আছে এবং JSON ডেটার age ফিল্ডটি একটি স্ট্রিং হিসেবে আসছে, কিন্তু আমরা চাই এটি ইন্টিজারে কনভার্ট হোক। এর জন্য কাস্টম ডেসিরিয়ালাইজার তৈরি করতে হবে।
Step 1: POJO ক্লাস তৈরি করা
প্রথমে একটি সাধারণ POJO ক্লাস তৈরি করুন:
public class Person {
private String name;
private int age;
// গেটার এবং সেটার মেথড
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;
}
}
Step 2: Custom Deserializer ক্লাস তৈরি করা
এখন একটি কাস্টম ডেসিরিয়ালাইজার তৈরি করুন, যা age ফিল্ডকে স্ট্রিং থেকে ইন্টিজার রূপে কনভার্ট করবে:
import io.boon.Boon;
import io.boon.json.JsonReader;
import io.boon.json.JsonWriter;
import java.util.Map;
public class PersonDeserializer {
public static Person deserialize(String json) {
// JSON ডেটা থেকে Map তৈরি করা
JsonReader reader = Boon.createReader(json);
Map<String, Object> map = reader.read(Map.class);
// কাস্টম ডেসিরিয়ালাইজেশন: age ফিল্ডকে String থেকে Integer তে কনভার্ট করা
Person person = new Person();
person.setName((String) map.get("name"));
// age ফিল্ডের কাস্টম কনভার্শন
String ageStr = (String) map.get("age");
if (ageStr != null) {
person.setAge(Integer.parseInt(ageStr)); // String to Integer
}
return person;
}
public static void main(String[] args) {
String json = "{\"name\":\"John Doe\", \"age\":\"30\"}";
// কাস্টম ডেসিরিয়ালাইজেশন ব্যবহার করে JSON থেকে POJO তৈরি করা
Person person = deserialize(json);
// POJO ডেটা প্রিন্ট করা
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
}
এখানে, PersonDeserializer ক্লাসে আমরা age ফিল্ডের কাস্টম ডেসিরিয়ালাইজেশন লজিক প্রয়োগ করেছি। JSON ডেটার age ফিল্ডটি স্ট্রিং হিসেবে আসবে, কিন্তু আমরা এটি কাস্টমভাবে ইন্টিজার হিসেবে কনভার্ট করেছি।
3. আরও কাস্টম ডেসিরিয়ালাইজেশন লজিক প্রয়োগ
আপনি আরও জটিল কাস্টম ডেসিরিয়ালাইজেশন লজিক প্রয়োগ করতে পারেন, যেমন ফিল্ডের মান নির্ভর করে অন্য কিছু পরিবর্তন করা বা ডেটা যাচাই করা।
উদাহরণ: Date ফিল্ডের কাস্টম ডেসিরিয়ালাইজেশন
ধরা যাক, JSON ডেটাতে একটি date ফিল্ড আছে, যেটি স্ট্রিং আকারে আসছে এবং আপনাকে তা java.util.Date অবজেক্টে কনভার্ট করতে হবে:
import java.text.SimpleDateFormat;
import java.util.Date;
public class PersonWithDateDeserializer {
public static Person deserialize(String json) {
JsonReader reader = Boon.createReader(json);
Map<String, Object> map = reader.read(Map.class);
Person person = new Person();
person.setName((String) map.get("name"));
String ageStr = (String) map.get("age");
if (ageStr != null) {
person.setAge(Integer.parseInt(ageStr));
}
// date ফিল্ডের কাস্টম ডেসিরিয়ালাইজেশন
String dateStr = (String) map.get("date");
if (dateStr != null) {
try {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = formatter.parse(dateStr);
// যেহেতু POJO তে Date ফিল্ড নেই, এটি শুধু উদাহরণ হিসেবে দেখানো হয়েছে
System.out.println("Date: " + date);
} catch (Exception e) {
e.printStackTrace();
}
}
return person;
}
public static void main(String[] args) {
String json = "{\"name\":\"John Doe\", \"age\":\"30\", \"date\":\"2024-12-18\"}";
Person person = deserialize(json);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
}
এখানে, date ফিল্ডের মান একটি স্ট্রিং হিসেবে আসছে, এবং আমরা সেটিকে java.util.Date অবজেক্টে কনভার্ট করেছি।
সারাংশ
বুন (Boon) লাইব্রেরি ব্যবহার করে আপনি কাস্টম ডেসিরিয়ালাইজার তৈরি করতে পারেন, যা JSON ডেটাকে আপনার প্রয়োজন অনুসারে বিশেষভাবে কনভার্ট করতে সাহায্য করে। এই কাস্টম ডেসিরিয়ালাইজেশন প্রক্রিয়া আপনাকে JSON ডেটার বিভিন্ন ফরম্যাট, কনভার্শন, এবং টাইপ কাস্টিং প্রক্রিয়া নিয়ন্ত্রণ করতে সক্ষম করে। Boon.createReader() এবং Map এর মাধ্যমে JSON ডেটা পড়ে, আপনি কাস্টম লজিক প্রয়োগ করে POJO অবজেক্টে রূপান্তর করতে পারেন।