Serialization এবং Deserialization এর সময় Null Ignoring

Gson এর Null Values এবং Default Values ব্যবস্থাপনা - জিসন (Gson) - Java Technologies

341

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) করার জন্য নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করা হয়:

  1. SerializationserializeNulls() ব্যবহার করে null মান সিরিয়ালাইজ করা বা উপেক্ষা করা।
  2. Deserialization এর সময় null মান ডিফল্ট মানে পরিবর্তন করতে কাস্টম ডেসিরিয়ালাইজেশন ব্যবহার করা যেতে পারে।

এগুলি Gson কে আরও শক্তিশালী এবং নমনীয় করে তোলে, এবং প্রয়োজনে null মানকে উপেক্ষা বা নিয়ন্ত্রণ করা সম্ভব হয়।

Content added By
Promotion

Are you sure to start over?

Loading...