Gson লাইব্রেরি ডিফল্টভাবে null মানের ফিল্ডগুলোকে JSON ডেটাতে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার সময় অন্তর্ভুক্ত করে। তবে, অনেক সময় আপনি চাইবেন যে null মানের ফিল্ডগুলোকে সিরিয়ালাইজেশনের সময় উপেক্ষা করা হোক, অর্থাৎ তারা JSON আউটপুটে না আসুক।
Null Ignoring করার জন্য Gson একটি কনফিগারেশন অপশন সরবরাহ করে।
Serialization এর সময় Null Ignoring
যখন আপনি JSON-এ একটি Java অবজেক্ট সিরিয়ালাইজ করেন, তখন আপনি চাইলে null মানের প্রপার্টি বা ফিল্ডগুলোকে উপেক্ষা করতে পারেন। এটি করার জন্য Gson-এর GsonBuilder এর serializeNulls() মেথডটি ব্যবহার করা হয়।
যদি serializeNulls() না ব্যবহার করা হয়, তাহলে Gson ডিফল্টভাবে null মানের প্রপার্টি গুলি JSON আউটপুটে অন্তর্ভুক্ত করবে।
উদাহরণ: Null Ignoring during Serialization
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class Main {
public static void main(String[] args) {
Person person = new Person("John", null, 25);
// GsonBuilder দিয়ে Null গুলি উপেক্ষা করে JSON সিরিয়ালাইজ করা
Gson gson = new GsonBuilder()
.serializeNulls() // এই লাইনটি Null গুলি সিরিয়ালাইজ করবে
.create();
String jsonWithNulls = gson.toJson(person);
System.out.println("Serialized with Nulls: " + jsonWithNulls);
// GsonBuilder দিয়ে Null গুলি উপেক্ষা করে JSON সিরিয়ালাইজ করা
gson = new GsonBuilder()
.create(); // Null গুলি সিরিয়ালাইজ হবে না
String jsonWithoutNulls = gson.toJson(person);
System.out.println("Serialized without Nulls: " + jsonWithoutNulls);
}
}
class Person {
String name;
String address;
int age;
Person(String name, String address, int age) {
this.name = name;
this.address = address;
this.age = age;
}
}
আউটপুট:
Serialized with Nulls: {"name":"John","address":null,"age":25}
Serialized without Nulls: {"name":"John","age":25}
ব্যাখ্যা:
- প্রথম Gson অবজেক্টে
serializeNulls()ব্যবহার করা হয়েছে, যার ফলেaddressফিল্ডেরnullমান JSON আউটপুটে অন্তর্ভুক্ত হয়েছে। - দ্বিতীয় Gson অবজেক্টে
serializeNulls()ব্যবহার করা হয়নি, ফলেaddressফিল্ডটি আউটপুটে অন্তর্ভুক্ত হয়নি।
Deserialization এর সময় Null Ignoring
Deserialization এর সময়, যদি JSON ডেটাতে কিছু null মান থাকে, এবং আপনি যদি সেই ফিল্ডগুলোর জন্য ডিফল্ট মান দিতে চান, তাহলে Gson এই কাজটি করতে পারে। তবে null উপেক্ষা করার জন্য কোনও নির্দিষ্ট কনফিগারেশন প্রয়োজন নেই, কারণ Gson স্বয়ংক্রিয়ভাবে null ডেটা গ্রহণ করতে পারে এবং Java অবজেক্টের জন্য সেগুলি null হিসেবে রূপান্তর করে।
যদি আপনি null মানগুলোকে কিছু ডিফল্ট মানে পরিবর্তন করতে চান, তাহলে আপনি কাস্টম ডেসিরিয়ালাইজেশন ব্যবহার করতে পারেন।
উদাহরণ: Null Ignoring during Deserialization
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
String jsonWithNulls = "{\"name\":\"John\",\"address\":null,\"age\":25}";
// GsonBuilder দিয়ে Null গুলি উপেক্ষা না করে ডেসিরিয়ালাইজ করা
Gson gson = new Gson();
Person personWithNulls = gson.fromJson(jsonWithNulls, Person.class);
System.out.println("Deserialized with Nulls: " + personWithNulls);
// কাস্টম ডেসিরিয়ালাইজেশন ব্যবহার করে Null গুলি উপেক্ষা করতে পারেন
gson = new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonDeserializer())
.create();
Person personWithDefault = gson.fromJson(jsonWithNulls, Person.class);
System.out.println("Deserialized with Defaults: " + personWithDefault);
}
}
class Person {
String name;
String address;
int age;
Person(String name, String address, int age) {
this.name = name;
this.address = address;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', address='" + address + "', age=" + age + "}";
}
}
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("name").getAsString();
String address = jsonObject.has("address") ? jsonObject.get("address").getAsString() : "No Address"; // Default value
int age = jsonObject.get("age").getAsInt();
return new Person(name, address, age);
}
}
আউটপুট:
Deserialized with Nulls: Person{name='John', address='null', age=25}
Deserialized with Defaults: Person{name='John', address='No Address', age=25}
ব্যাখ্যা:
- প্রথম
Personঅবজেক্টেaddressফিল্ডের মানnullথাকার কারণে এটিnullহিসেবে রূপান্তরিত হয়েছে। - দ্বিতীয় ক্ষেত্রে, কাস্টম
PersonDeserializerব্যবহার করেaddressএর জন্যnullএর বদলে "No Address" ডিফল্ট মান দেওয়া হয়েছে।
Gson দিয়ে Serialization এবং Deserialization এর সময় null মান উপেক্ষা (ignore) করার জন্য নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করা হয়:
- Serialization এ
serializeNulls()ব্যবহার করেnullমান সিরিয়ালাইজ করা বা উপেক্ষা করা। - Deserialization এর সময়
nullমান ডিফল্ট মানে পরিবর্তন করতে কাস্টম ডেসিরিয়ালাইজেশন ব্যবহার করা যেতে পারে।
এগুলি Gson কে আরও শক্তিশালী এবং নমনীয় করে তোলে, এবং প্রয়োজনে null মানকে উপেক্ষা বা নিয়ন্ত্রণ করা সম্ভব হয়।
Read more