JSON (JavaScript Object Notation) একটি জনপ্রিয় ডাটা এক্সচেঞ্জ ফরম্যাট, যা বিভিন্ন প্রোগ্রামিং ভাষার মধ্যে ডেটা ট্রান্সফারের জন্য ব্যবহৃত হয়। Java-তে JSON ডেটার প্রক্রিয়াকরণ করার জন্য org.json লাইব্রেরি ব্যবহার করা হয়। তবে কিছু বিশেষ ক্ষেত্রে, যখন JSON ডেটা প্রক্রিয়াকরণের জন্য ডিফল্ট সিরিয়ালাইজেশন বা ডেসিরিয়ালাইজেশন যথেষ্ট হয় না, তখন Custom Serializer এবং Custom Deserializer প্রয়োজন হয়।
এই টিউটোরিয়ালে, আমরা জানব Custom Serializer এবং Custom Deserializer কি, এবং এগুলির ব্যবহার কেন প্রয়োজন।
Custom Serializer কি?
Custom Serializer এমন একটি কাস্টম ক্লাস বা কাস্টম ফাংশন যা নির্দিষ্ট অবজেক্ট বা ডেটা ফরম্যাটকে JSON ফরম্যাটে রূপান্তর করতে ব্যবহৃত হয়। সাধারণভাবে, JSON সিরিয়ালাইজেশন কাজটি org.json লাইব্রেরি নিজেই স্বয়ংক্রিয়ভাবে করে থাকে। তবে যদি আপনার ডেটা কাঠামো বা কোনো নির্দিষ্ট শর্ত থাকে যেটি ডিফল্ট সিরিয়ালাইজেশন প্রক্রিয়া দ্বারা হ্যান্ডল করা সম্ভব না হয়, তখন কাস্টম সিরিয়ালাইজার ব্যবহার করতে হয়।
উদাহরণস্বরূপ, যদি কোনো অবজেক্টে বিশেষভাবে ডেটা ফরম্যাট পরিবর্তন করার প্রয়োজন হয় (যেমন, সময়ের মানকে একটি নির্দিষ্ট ফরম্যাটে স্টোর করা), তখন কাস্টম সিরিয়ালাইজার ব্যবহার করা হবে।
Custom Deserializer কি?
Custom Deserializer এমন একটি কাস্টম ক্লাস বা কাস্টম ফাংশন যা JSON ডেটাকে Java অবজেক্টে রূপান্তর (ডেসিরিয়ালাইজ) করতে ব্যবহৃত হয়। সাধারণত, JSON ডেটা Java অবজেক্টে ডেসিরিয়ালাইজ করার জন্য org.json লাইব্রেরি নিজেই কাজ করে। কিন্তু যদি আপনার JSON ডেটার মধ্যে কিছু বিশেষ কনভার্সন প্রক্রিয়া থাকে বা কাস্টম লজিক প্রয়োগ করতে হয়, তখন কাস্টম ডেসিরিয়ালাইজার ব্যবহার করা হয়।
যেমন, যদি JSON ডেটাতে কোনো নির্দিষ্ট কনভার্সন ফর্ম্যাট ব্যবহার করতে হয়, যেমন ডেটা টাইপ পরিবর্তন বা বিশেষ ধরনের ইনপুট গ্রহণ, তখন কাস্টম ডেসিরিয়ালাইজার ব্যবহার করা হবে।
Custom Serializer এবং Deserializer প্রয়োজন কেন?
কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার ব্যবহারের প্রয়োজন পড়ে যখন:
- বিশেষ কাস্টম ডেটা ফরম্যাট: JSON এবং Java অবজেক্টের মধ্যে কাস্টম ফরম্যাটে ডেটা রূপান্তর করতে হয়। উদাহরণস্বরূপ, একটি বিশেষ তারিখ ফরম্যাট বা টোকেন টাইপ পরিবর্তন।
- ডিফল্ট লজিকের বাইরে কাজ: ডিফল্ট JSON সিরিয়ালাইজেশন/ডেসিরিয়ালাইজেশন প্রক্রিয়া আপনার ডেটা কাঠামোর জন্য যথেষ্ট নয়, তাই কাস্টম লজিক প্রয়োগ করা প্রয়োজন।
- কাস্টম প্রপার্টি ম্যানিপুলেশন: কিছু প্রপার্টি বা ডেটা আইটেম JSON ডেটায় একটি নির্দিষ্ট আকারে সংরক্ষণ করতে হতে পারে।
- ডেটা ফিল্টারিং: কিছু ক্ষেত্র বাদ দিয়ে বা পরিবর্তন করে JSON ডেটা তৈরি করতে হতে পারে, যা ডিফল্ট সিরিয়ালাইজেশন হ্যান্ডেল করতে পারে না।
উদাহরণ: Custom Serializer
ধরা যাক, আমাদের একটি Employee অবজেক্ট আছে এবং আমরা চাই যে Employee অবজেক্টের hireDate প্রপার্টিটি JSON ফরম্যাটে একটি নির্দিষ্ট তারিখ ফরম্যাটে রূপান্তরিত হোক। এর জন্য কাস্টম সিরিয়ালাইজার ব্যবহার করা যেতে পারে।
import org.json.JSONObject;
import org.json.JSONStringer;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Employee {
private String name;
private Date hireDate;
// Constructor
public Employee(String name, Date hireDate) {
this.name = name;
this.hireDate = hireDate;
}
// Custom serializer method
public JSONObject toJSON() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", this.name);
// Custom date format
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = sdf.format(this.hireDate);
jsonObject.put("hireDate", formattedDate);
return jsonObject;
}
}
এই ক্ষেত্রে, Employee অবজেক্টের hireDate প্রপার্টি কাস্টম ফরম্যাটে রূপান্তরিত হচ্ছে, যেমন "yyyy-MM-dd"।
উদাহরণ: Custom Deserializer
একটি কাস্টম ডেসিরিয়ালাইজার ব্যবহার করে JSON থেকে Java অবজেক্টে ডেটা রূপান্তর করতে, ধরুন আপনি একটি Employee অবজেক্টে hireDate কে একটি নির্দিষ্ট তারিখ ফরম্যাটে ডেসিরিয়ালাইজ করতে চান:
import org.json.JSONObject;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Employee {
private String name;
private Date hireDate;
// Constructor
public Employee(String name, Date hireDate) {
this.name = name;
this.hireDate = hireDate;
}
// Custom deserializer method
public static Employee fromJSON(JSONObject jsonObject) throws Exception {
String name = jsonObject.getString("name");
// Custom date parsing
String hireDateStr = jsonObject.getString("hireDate");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date hireDate = sdf.parse(hireDateStr);
return new Employee(name, hireDate);
}
}
এখানে, hireDate প্রপার্টিটি JSON ডেটা থেকে নির্দিষ্ট তারিখ ফরম্যাটে ডেসিরিয়ালাইজ করা হচ্ছে।
কেন কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার ব্যবহার করা উচিত?
- বিশেষ প্রয়োজনে ফরম্যাট প্রক্রিয়া: JSON ডেটার মধ্যে আপনার প্রয়োজন অনুযায়ী কাস্টম লজিক প্রয়োগ করা।
- ডেটা নিরাপত্তা ও ফিল্টারিং: কিছু ডেটা বা প্রপার্টি বাদ দেয়া, পরিবর্তন বা শীর্ষস্থানীয় নিরাপত্তার জন্য।
- পারফরম্যান্স বৃদ্ধি: কাস্টম লজিক প্রয়োগের মাধ্যমে পারফরম্যান্স বা ডেটা প্রক্রিয়াকরণ দ্রুত করা যেতে পারে।
সারাংশ
Custom Serializer এবং Custom Deserializer Java-তে JSON ডেটা সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন প্রক্রিয়া কাস্টমাইজ করতে ব্যবহৃত হয়। এগুলি ব্যবহারের মাধ্যমে, আপনি আপনার ডেটা কাঠামো এবং ফরম্যাট অনুযায়ী JSON ডেটাকে প্রক্রিয়া করতে পারেন। যখন ডিফল্ট প্রক্রিয়া আপনার বিশেষ প্রয়োজন মেটাতে সক্ষম না হয়, তখন কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার অত্যন্ত কার্যকরী হয়ে ওঠে।
Read more