JSON এ Null Values হ্যান্ডল করা

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

407

Gson লাইব্রেরি JSON ডেটার সাথে কাজ করার সময় null values হ্যান্ডল করার জন্য বেশ কিছু উপায় প্রদান করে। Gson দ্বারা null values ডিফল্টভাবে JSON ডেটাতে null হিসেবে সিরিয়ালাইজ করা হয়, এবং যখন JSON থেকে Java Object-এ ডিসেরিয়ালাইজ করা হয়, তখন null মানগুলি সঠিকভাবে সেট করা হয়। তবে, কিছু সময়ে আপনি যদি null values হ্যান্ডল করার সময় কাস্টমাইজেশন করতে চান (যেমন, null মানগুলিকে বাদ দেওয়া বা আলাদাভাবে হ্যান্ডেল করা), তাহলে Gson কিছু কনফিগারেশন অপশনও প্রদান করে।

এখানে JSON এ null values হ্যান্ডল করার বিভিন্ন পদ্ধতি আলোচনা করা হলো।


১. ডিফল্টভাবে Null Value সিরিয়ালাইজেশন

Gson ডিফল্টভাবে যেকোনো null মানকে JSON এ null হিসেবে সিরিয়ালাইজ করে। যেমন:

উদাহরণ ১: JSON এ null value সিরিয়ালাইজ করা

import com.google.gson.Gson;

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John", null);  // "address" is null
        
        Gson gson = new Gson();
        String json = gson.toJson(person);
        
        System.out.println(json);  // Output: {"name":"John","address":null}
    }
}

class Person {
    String name;
    String address;

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }
}

এখানে, address ফিল্ডটির মান null হওয়ার কারণে JSON ডেটাতে address: null হিসেবে দেখা যাবে।


২. Null Values বাদ দেয়া (Exclude Null Fields)

Gson ব্যবহার করে আপনি null values বাদ দেয়ার জন্য কাস্টম সেটিংস করতে পারেন, যাতে null fields JSON-এ সিরিয়ালাইজ না হয়। এটি GsonBuilder এর excludeFieldsWithoutExposeAnnotation() অথবা serializeNulls() অপশন ব্যবহার করে করা যেতে পারে।

উদাহরণ ২: Null Values বাদ দেয়া (exclude null fields)

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);  // "address" is null
        
        Gson gson = new GsonBuilder()
                        .serializeNulls()  // Null values will be included
                        .create();
        
        String json = gson.toJson(person);
        System.out.println(json);  // Output: {"name":"John","address":null}

        Gson gsonWithoutNulls = new GsonBuilder()
                        .excludeFieldsWithoutExposeAnnotation()  // Exclude null fields
                        .create();
        String jsonWithoutNulls = gsonWithoutNulls.toJson(person);
        System.out.println(jsonWithoutNulls);  // Output: {"name":"John"}
    }
}

class Person {
    String name;
    String address;

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }
}

৩. Null Values হ্যান্ডলিং এর জন্য কাস্টম Serializer এবং Deserializer তৈরি করা

কখনো কখনো আপনি null values কে বিশেষভাবে হ্যান্ডল করতে চান, যেমন একটি ফিল্ডে null আসলে একটি ডিফল্ট মান দিতে চান। এমন ক্ষেত্রে আপনি কাস্টম Serializer এবং Deserializer ব্যবহার করতে পারেন।

উদাহরণ ৩: Custom Serializer ব্যবহার করে Null Values হ্যান্ডল করা

import com.google.gson.*;

import java.lang.reflect.Type;

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John", null);  // "address" is null

        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(String.class, new NullStringAdapter())  // Register custom adapter
                        .create();

        String json = gson.toJson(person);
        System.out.println(json);  // Output: {"name":"John","address":"N/A"}
    }
}

class Person {
    String name;
    String address;

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }
}

// Custom Serializer for handling null String values
class NullStringAdapter implements JsonSerializer<String> {
    @Override
    public JsonElement serialize(String src, Type typeOfSrc, JsonSerializationContext context) {
        if (src == null) {
            return new JsonPrimitive("N/A");  // Return a default value for null
        }
        return new JsonPrimitive(src);
    }
}

এখানে NullStringAdapter কাস্টম সিরিয়ালাইজার ব্যবহার করা হয়েছে যা null মানগুলিকে "N/A" তে রূপান্তরিত করে।

উদাহরণ ৪: Custom Deserializer ব্যবহার করে Null Values হ্যান্ডল করা

import com.google.gson.*;

import java.lang.reflect.Type;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"John\", \"address\":null}";

        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Person.class, new NullAddressDeserializer())  // Register custom deserializer
                        .create();

        Person person = gson.fromJson(json, Person.class);
        System.out.println(person.address);  // Output: "Unknown Address"
    }
}

class Person {
    String name;
    String address;

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }
}

// Custom Deserializer for handling null address values
class NullAddressDeserializer 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").isJsonNull() 
                            ? jsonObject.get("address").getAsString() 
                            : "Unknown Address";  // Provide default value for null address
        return new Person(name, address);
    }
}

এখানে NullAddressDeserializer কাস্টম ডেসেরিয়ালাইজার ব্যবহার করা হয়েছে যা null মানের ক্ষেত্রে একটি ডিফল্ট মান "Unknown Address" প্রদান করে।


৪. Null Values সিরিয়ালাইজ না করার জন্য excludeFieldsWithoutExposeAnnotation() ব্যবহার

আপনি যদি কোনো ফিল্ডকে null value থাকলে সিরিয়ালাইজ করতে না চান, তবে @Expose এনোটেশন ব্যবহার করতে পারেন।

উদাহরণ ৫: @Expose এনোটেশন ব্যবহার করে Null Values হ্যান্ডল করা

import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
import com.google.gson.GsonBuilder;

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John", null);  // "address" is null

        Gson gson = new GsonBuilder()
                        .excludeFieldsWithoutExposeAnnotation()  // Exclude fields without @Expose annotation
                        .create();

        String json = gson.toJson(person);
        System.out.println(json);  // Output: {"name":"John"}
    }
}

class Person {
    @Expose
    String name;
    
    @Expose(serialize = false)  // Prevent serialization of "address" field
    String address;

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }
}

এখানে, address ফিল্ডটি serialize = false দিয়ে এক্সক্লুড করা হয়েছে, ফলে তা JSON-এ সিরিয়ালাইজ হবে না।


Gson লাইব্রেরি null values হ্যান্ডল করার জন্য বেশ কিছু সুবিধা প্রদান করে, যেমন:

  • ডিফল্টভাবে null মান JSON এ সিরিয়ালাইজ হয়।
  • আপনি null values বাদ দিতে পারেন বা কাস্টম সিরিয়ালাইজার এবং ডেসেরিয়ালাইজার ব্যবহার করতে পারেন।
  • @Expose এবং TypeToken এর সাহায্যে null মানগুলোকে আরও নিয়ন্ত্রণ করতে পারেন।

এটি JSON ডেটার সাথে কাজ করার সময় আরো নমনীয়তা এবং কাস্টমাইজেশনের সুযোগ প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...