Skill

JSON এর সাথে Collection এবং Generic টাইপের কাজ

জিসন (Gson) - Java Technologies

506

Gson লাইব্রেরি JSON এর সাথে Collection এবং Generic টাইপ কাজ করার জন্য একটি শক্তিশালী এবং সহজ ব্যবস্থাপনা প্রদান করে। Gson ব্যবহার করে আপনি JSON ডেটাকে List, Set, Map বা অন্যান্য Collection টাইপে রূপান্তর করতে পারেন এবং একইভাবে Generic টাইপের ক্লাসগুলিকে JSON এ রূপান্তর ও ডিসেরিয়ালাইজ করতে পারেন।

এখানে JSON এর সাথে Collection এবং Generic টাইপের কাজ করার জন্য কিছু উদাহরণ দেয়া হলো।


১. Collection (List, Set) এর সাথে কাজ:

Gson Collection টাইপের সাথে কাজ করার জন্য একটি TypeToken ব্যবহার করে নির্দিষ্ট টাইপের Collection এ JSON রূপান্তর বা ডিসেরিয়ালাইজ করতে সাহায্য করে।

উদাহরণ ১: List এর সাথে কাজ

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String json = "[\"apple\", \"banana\", \"orange\"]"; // JSON Array
        
        Gson gson = new Gson();
        
        // List<String> এ JSON ডেটা ডিসেরিয়ালাইজ করতে TypeToken ব্যবহার করা হচ্ছে
        Type listType = new TypeToken<List<String>>() {}.getType();
        List<String> fruits = gson.fromJson(json, listType);  // JSON থেকে List তে রূপান্তর
        
        System.out.println(fruits); // Output: [apple, banana, orange]
    }
}

উদাহরণ ২: Set এর সাথে কাজ

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        String json = "[\"apple\", \"banana\", \"orange\"]"; // JSON Array
        
        Gson gson = new Gson();
        
        // Set<String> এ JSON ডেটা ডিসেরিয়ালাইজ করতে TypeToken ব্যবহার করা হচ্ছে
        Type setType = new TypeToken<Set<String>>() {}.getType();
        Set<String> fruits = gson.fromJson(json, setType);  // JSON থেকে Set তে রূপান্তর
        
        System.out.println(fruits); // Output: [banana, orange, apple]
    }
}

২. Map এর সাথে কাজ:

Map (যেমন: HashMap, TreeMap) এর জন্যও Gson একইভাবে TypeToken ব্যবহার করে JSON রূপান্তর বা ডিসেরিয়ালাইজ করতে সক্ষম।

উদাহরণ ৩: Map এর সাথে কাজ

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"John\", \"age\":\"30\"}";  // JSON Object
        
        Gson gson = new Gson();
        
        // Map<String, String> এ JSON ডেটা ডিসেরিয়ালাইজ করতে TypeToken ব্যবহার করা হচ্ছে
        Type mapType = new TypeToken<Map<String, String>>() {}.getType();
        Map<String, String> map = gson.fromJson(json, mapType);  // JSON থেকে Map তে রূপান্তর
        
        System.out.println(map); // Output: {name=John, age=30}
    }
}

৩. Generic টাইপ এর সাথে কাজ:

Gson Generic টাইপের ক্লাসগুলোর জন্যও কাজ করতে পারে। তবে, Generic টাইপগুলোর সাথে কাজ করার জন্য TypeToken ব্যবহার করা প্রয়োজন।

উদাহরণ ৪: Generic Class এর সাথে কাজ

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;

class Wrapper<T> {
    private T value;

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }
}

public class Main {
    public static void main(String[] args) {
        String json = "{\"value\":\"Hello, World!\"}";  // JSON Object
        
        Gson gson = new Gson();
        
        // Wrapper<String> এ JSON ডেটা ডিসেরিয়ালাইজ করতে TypeToken ব্যবহার করা হচ্ছে
        Type type = new TypeToken<Wrapper<String>>() {}.getType();
        Wrapper<String> wrapper = gson.fromJson(json, type);  // JSON থেকে Wrapper<String> তে রূপান্তর
        
        System.out.println(wrapper.getValue());  // Output: Hello, World!
    }
}

৪. Nested Generic টাইপের সাথে কাজ:

এটি আরও একটি সাধারণ চ্যালেঞ্জ যেখানে Collection অথবা Map এর মধ্যে Generic টাইপ ব্যবহার করা হয়। Gson TypeToken সহ সহজে এই ধরনের নেস্টেড টাইপ হ্যান্ডেল করতে পারে।

উদাহরণ ৫: List of Generic Objects এর সাথে কাজ

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;

class Box<T> {
    private T item;
    
    public Box(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }

    public void setItem(T item) {
        this.item = item;
    }
}

public class Main {
    public static void main(String[] args) {
        String json = "[{\"item\":\"apple\"}, {\"item\":\"banana\"}, {\"item\":\"orange\"}]";  // JSON Array
        
        Gson gson = new Gson();
        
        // List<Box<String>> এর জন্য TypeToken ব্যবহার করা হচ্ছে
        Type listType = new TypeToken<List<Box<String>>>() {}.getType();
        List<Box<String>> boxes = gson.fromJson(json, listType);  // JSON থেকে List<Box<String>> তে রূপান্তর
        
        for (Box<String> box : boxes) {
            System.out.println(box.getItem()); // Output: apple, banana, orange
        }
    }
}

Gson লাইব্রেরি ব্যবহার করে JSON ডেটা সহজে Collection এবং Generic টাইপে রূপান্তর করা যায়। এর জন্য TypeToken ব্যবহৃত হয়, যা টাইপের ইনফরমেশন সংরক্ষণ করে, এবং Gson ডেটা ডিসেরিয়ালাইজ বা সিরিয়ালাইজ করার সময় সঠিক টাইপ চিনতে সাহায্য করে। Gson-এর এই সুবিধাগুলি JSON ডেটার সাথে কার্যকরভাবে কাজ করার জন্য একটি শক্তিশালী টুল সরবরাহ করে।

Content added By

Gson লাইব্রেরি ব্যবহার করে Java-এর Collection (যেমন List, Set, এবং Map) কে JSON ফরম্যাটে কনভার্ট করা খুবই সহজ। Gson স্বাভাবিকভাবে বিভিন্ন ধরনের Collection-এর অবজেক্টকে JSON এ রূপান্তর করতে পারে, তবে কিছু ক্ষেত্রে বিশেষভাবে টাইপ ইনফরমেশন দেওয়ার প্রয়োজন হতে পারে, যেমন List<String> বা Map<String, Integer>

1. List কে JSON এ কনভার্ট করা:

ধরা যাক, আমাদের একটি List অবজেক্ট রয়েছে, যা কিছু String ডেটা ধারণ করে।

উদাহরণ:

import com.google.gson.Gson;
import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // List তৈরি করা
        List<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");

        // Gson অবজেক্ট তৈরি
        Gson gson = new Gson();

        // List কে JSON এ রূপান্তর করা
        String json = gson.toJson(names);

        // JSON প্রিন্ট করা
        System.out.println(json);
    }
}

আউটপুট:

["Alice","Bob","Charlie"]

এখানে, toJson() মেথড ব্যবহার করে List<String> কে JSON অ্যারে হিসেবে রূপান্তরিত করা হয়েছে।


2. Set কে JSON এ কনভার্ট করা:

Set হল একটি কালেকশন টাইপ যেখানে ডুপ্লিকেট আইটেম থাকতে পারে না। Gson এর মাধ্যমে এটি JSON অ্যারে আকারে কনভার্ট করা যায়।

উদাহরণ:

import com.google.gson.Gson;
import java.util.Set;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        // Set তৈরি করা
        Set<String> namesSet = new HashSet<>();
        namesSet.add("Alice");
        namesSet.add("Bob");
        namesSet.add("Charlie");

        // Gson অবজেক্ট তৈরি
        Gson gson = new Gson();

        // Set কে JSON এ রূপান্তর করা
        String json = gson.toJson(namesSet);

        // JSON প্রিন্ট করা
        System.out.println(json);
    }
}

আউটপুট:

["Alice","Bob","Charlie"]

এখানে Set কে JSON অ্যারে আকারে রূপান্তরিত করা হয়েছে, যেখানে উপাদানগুলো ডুপ্লিকেট ছাড়া রয়েছে।


3. Map (Key-Value Pair) কে JSON এ কনভার্ট করা:

Map হল একটি কনটেইনার যেখানে ডেটা Key-Value পেয়ার আকারে সংরক্ষিত থাকে। Gson দিয়ে Map অবজেক্টকে JSON অবজেক্ট হিসেবে কনভার্ট করা যায়।

উদাহরণ:

import com.google.gson.Gson;
import java.util.Map;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        // Map তৈরি করা
        Map<String, Integer> ageMap = new HashMap<>();
        ageMap.put("Alice", 30);
        ageMap.put("Bob", 25);
        ageMap.put("Charlie", 35);

        // Gson অবজেক্ট তৈরি
        Gson gson = new Gson();

        // Map কে JSON এ রূপান্তর করা
        String json = gson.toJson(ageMap);

        // JSON প্রিন্ট করা
        System.out.println(json);
    }
}

আউটপুট:

{"Alice":30,"Bob":25,"Charlie":35}

এখানে, Map<String, Integer> কে JSON অবজেক্ট হিসেবে রূপান্তরিত করা হয়েছে, যেখানে কীগুলো স্ট্রিং এবং মানগুলো ইন্টিজার।


4. জেনেরিক টাইপের Collection কে JSON এ কনভার্ট করা:

যখন আপনার Collection টাইপ জেনেরিক (যেমন List<String>, Map<String, Integer>) হয়, তখন Gson লাইব্রেরি আপনার টাইপ ইনফরমেশন বোঝে এবং সঠিকভাবে রূপান্তর করতে পারে। তবে, কিছু ক্ষেত্রে টাইপ ইনফরমেশন ঠিকমতো কাজ করার জন্য TypeToken ব্যবহার করতে হতে পারে।

উদাহরণ: List<String> রূপান্তর:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");

        Gson gson = new Gson();
        
        // TypeToken ব্যবহার করে List<String> টাইপ নির্ধারণ করা
        Type listType = new TypeToken<List<String>>() {}.getType();
        
        // List কে JSON এ রূপান্তর করা
        String json = gson.toJson(names, listType);
        
        // JSON প্রিন্ট করা
        System.out.println(json);
    }
}

আউটপুট:

["Alice","Bob","Charlie"]

এখানে TypeToken ব্যবহার করে List<String> টাইপকে Gson বুঝতে সাহায্য করা হয়েছে।


Gson এর toJson() মেথডের সারাংশ:

  • List, Set, এবং Map এর মতো Java Collection টাইপ গুলোকে JSON ফরম্যাটে কনভার্ট করতে Gson এর toJson() মেথড ব্যবহার করা হয়।
  • toJson() মেথড স্বয়ংক্রিয়ভাবে Collection-এর উপাদানগুলোর উপর ভিত্তি করে JSON অ্যারে বা অবজেক্ট রূপান্তর করে।
  • জেনেরিক টাইপের Collection রূপান্তরের জন্য TypeToken ব্যবহার করা হয়, যাতে Gson টাইপ ইনফরমেশন ঠিকমতো বুঝে এবং রূপান্তর করতে পারে।

এভাবে আপনি Java Collection টাইপ (List, Set, Map) গুলোকে সহজেই JSON এ কনভার্ট করতে পারেন Gson লাইব্রেরি ব্যবহার করে।

Content added By

Gson লাইব্রেরি ব্যবহার করে Generic টাইপের কাজ করার জন্য TypeToken ব্যবহার করতে হয়। Gson এর TypeToken ক্লাসটি টাইপ প্যারামিটারগুলির সাথে জেনেরিক টাইপ সঠিকভাবে ডেসিরিয়ালাইজ করার জন্য ব্যবহৃত হয়। কারণ Java রিফ্লেকশন মাধ্যমে প্রকারের তথ্য (type information) পাওয়া কঠিন, বিশেষত যখন জেনেরিক টাইপ ব্যবহৃত হয়।

উদাহরণ:

ধরা যাক, আমাদের একটি List<String> টাইপের JSON ডেটা আছে এবং আমরা সেটি Gson ব্যবহার করে একটি জেনেরিক টাইপে ডেসিরিয়ালাইজ করতে চাই।

Maven ডিপেনডেন্সি:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.8</version>
</dependency>

TypeToken ব্যবহার করে জেনেরিক টাইপের ডেসিরিয়ালাইজ:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String json = "[\"Apple\", \"Banana\", \"Orange\"]";

        // Gson ইনস্ট্যান্স তৈরি
        Gson gson = new Gson();

        // TypeToken ব্যবহার করে জেনেরিক টাইপের ডেসিরিয়ালাইজ করা
        Type listType = new TypeToken<List<String>>(){}.getType();
        List<String> fruitList = gson.fromJson(json, listType);

        // আউটপুট প্রদর্শন
        System.out.println(fruitList);
    }
}

ব্যাখ্যা:

  1. TypeToken ব্যবহার: TypeToken<List<String>> ব্যবহার করা হয়েছে যাতে Gson জানে যে এটি একটি List<String> টাইপের ডেসিরিয়ালাইজেশন করতে যাচ্ছে। TypeToken ক্লাসটি জেনেরিক টাইপের টাইপ ইনফরমেশন ধারণ করে, যা Gson এর জন্য প্রয়োজন।
  2. getType(): getType() মেথডটি TypeToken থেকে টাইপ ইনফরমেশন বের করে দেয়, যাতে এটি GsonfromJson() মেথডের প্যারামিটার হিসাবে পাঠানো যায়।

আউটপুট:

[Apple, Banana, Orange]

অন্য একটি উদাহরণ: জেনেরিক ক্লাস ডেসিরিয়ালাইজ করা

ধরা যাক, আমাদের একটি কাস্টম জেনেরিক ক্লাস Box<T> আছে এবং আমরা সেই ক্লাসের JSON ডেটা ডেসিরিয়ালাইজ করতে চাই।

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;

class Box<T> {
    private T value;

    public Box(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }

    @Override
    public String toString() {
        return "Box{" + "value=" + value + '}';
    }
}

public class Main {
    public static void main(String[] args) {
        String json = "{\"value\": 123}";

        // Gson ইনস্ট্যান্স তৈরি
        Gson gson = new Gson();

        // TypeToken ব্যবহার করে জেনেরিক টাইপের ডেসিরিয়ালাইজ করা
        Type boxType = new TypeToken<Box<Integer>>(){}.getType();
        Box<Integer> box = gson.fromJson(json, boxType);

        // আউটপুট প্রদর্শন
        System.out.println(box);
    }
}

এখানে Box<Integer> টাইপের JSON ডেটা ডেসিরিয়ালাইজ করা হয়েছে।

আউটপুট:

Box{value=123}

সারাংশ:

  • TypeToken ক্লাস ব্যবহার করে আমরা জেনেরিক টাইপের ডেসিরিয়ালাইজেশন করতে পারি।
  • এটি Gson কে টাইপ ইনফরমেশন প্রদান করে, যাতে এটি সঠিকভাবে JSON ডেটা কনভার্ট করতে পারে।
  • সাধারণত TypeToken এর মাধ্যমে জেনেরিক টাইপ এবং প্যারামিটারাইজড ক্লাসের ডেসিরিয়ালাইজেশন সম্ভব হয়।
Content added By

Nested Collection হলো এমন একটি অবস্থা যেখানে একটি ক্লাস বা অবজেক্টের মধ্যে অন্য অবজেক্ট বা কালেকশন (যেমন লিস্ট, ম্যাপ) থাকে। Gson লাইব্রেরি এই ধরনের নেস্টেড অবজেক্ট বা কালেকশন সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে সমর্থ।

এখানে, আমরা দেখবো কিভাবে Gson ব্যবহার করে Nested Collection গুলো সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা যায়।


1. Nested Collection Serialization এবং Deserialization

ধরা যাক, আমাদের কাছে একটি School ক্লাস রয়েছে, যেখানে একটি List<Student> নামে একটি নেস্টেড কালেকশন (লিস্ট) আছে, এবং Student এর মধ্যে আরেকটি List<String> নামে সাব কালেকশন রয়েছে (যেমন ছাত্রের বিষয় তালিকা)।

উদাহরণ:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Nested Collection তৈরি
        List<String> subjects1 = new ArrayList<>();
        subjects1.add("Math");
        subjects1.add("Science");

        List<String> subjects2 = new ArrayList<>();
        subjects2.add("English");
        subjects2.add("History");

        Student student1 = new Student("John", 20, subjects1);
        Student student2 = new Student("Alice", 22, subjects2);

        List<Student> students = new ArrayList<>();
        students.add(student1);
        students.add(student2);

        School school = new School("Greenwood High", students);

        // Gson অবজেক্ট তৈরি
        Gson gson = new Gson();

        // Nested Collection (List of Students) সিরিয়ালাইজ
        String json = gson.toJson(school);
        System.out.println("Serialized JSON: " + json);

        // JSON থেকে Deserialization (Back to Java object)
        School deserializedSchool = gson.fromJson(json, School.class);
        System.out.println("\nDeserialized School:");
        System.out.println("School Name: " + deserializedSchool.name);
        for (Student student : deserializedSchool.students) {
            System.out.println("Student Name: " + student.name);
            System.out.println("Subjects: " + student.subjects);
        }
    }
}

class School {
    String name;
    List<Student> students;

    School(String name, List<Student> students) {
        this.name = name;
        this.students = students;
    }
}

class Student {
    String name;
    int age;
    List<String> subjects;

    Student(String name, int age, List<String> subjects) {
        this.name = name;
        this.age = age;
        this.subjects = subjects;
    }
}

আউটপুট:

Serialized JSON: {"name":"Greenwood High","students":[{"name":"John","age":20,"subjects":["Math","Science"]},{"name":"Alice","age":22,"subjects":["English","History"]}]}

Deserialized School:
School Name: Greenwood High
Student Name: John
Subjects: [Math, Science]
Student Name: Alice
Subjects: [English, History]

2. Nested Collection Serialization (Custom Collection Types)

এছাড়া, Gson জেনেরিক টাইপের কালেকশন যেমন List, Set, Map ইত্যাদি সঠিকভাবে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার জন্য TypeToken ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, যদি আপনি একটি Map<String, List<Student>> সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে চান, তাহলে TypeToken ব্যবহার করা উচিত।

উদাহরণ:

import com.google.gson.*;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        // Nested Map Collection তৈরি
        List<Student> students1 = new ArrayList<>();
        students1.add(new Student("John", 20, Arrays.asList("Math", "Science")));
        students1.add(new Student("Alice", 22, Arrays.asList("English", "History")));

        List<Student> students2 = new ArrayList<>();
        students2.add(new Student("Bob", 23, Arrays.asList("Physics", "Chemistry")));
        
        Map<String, List<Student>> schoolStudents = new HashMap<>();
        schoolStudents.put("Class A", students1);
        schoolStudents.put("Class B", students2);

        // Gson অবজেক্ট তৈরি
        Gson gson = new Gson();

        // Nested Map Collection সিরিয়ালাইজ
        String json = gson.toJson(schoolStudents);
        System.out.println("Serialized Map JSON: " + json);

        // JSON থেকে Deserialization (Back to Java object)
        Type mapType = new TypeToken<Map<String, List<Student>>>() {}.getType();
        Map<String, List<Student>> deserializedMap = gson.fromJson(json, mapType);
        
        System.out.println("\nDeserialized Map:");
        for (Map.Entry<String, List<Student>> entry : deserializedMap.entrySet()) {
            System.out.println("Class: " + entry.getKey());
            for (Student student : entry.getValue()) {
                System.out.println("Student Name: " + student.name);
                System.out.println("Subjects: " + student.subjects);
            }
        }
    }
}

class Student {
    String name;
    int age;
    List<String> subjects;

    Student(String name, int age, List<String> subjects) {
        this.name = name;
        this.age = age;
        this.subjects = subjects;
    }
}

আউটপুট:

Serialized Map JSON: {"Class A":[{"name":"John","age":20,"subjects":["Math","Science"]},{"name":"Alice","age":22,"subjects":["English","History"]}],"Class B":[{"name":"Bob","age":23,"subjects":["Physics","Chemistry"]}]}

Deserialized Map:
Class: Class A
Student Name: John
Subjects: [Math, Science]
Student Name: Alice
Subjects: [English, History]
Class: Class B
Student Name: Bob
Subjects: [Physics, Chemistry]

3. Custom Serialization/Deserialization for Nested Collection

যদি আপনি একটি কাস্টম সিরিয়ালাইজেশন বা ডেসিরিয়ালাইজেশন লজিক প্রয়োগ করতে চান, তবে আপনি JsonSerializer এবং JsonDeserializer ব্যবহার করতে পারেন। নিচে একটি কাস্টম ডেসিরিয়ালাইজেশন উদাহরণ দেওয়া হলো, যেখানে List<String> ক্লাসের উপাদানগুলির উপর কিছু কাস্টম লজিক প্রয়োগ করা হয়েছে।

উদাহরণ:

import com.google.gson.*;

import java.lang.reflect.Type;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"John\",\"age\":20,\"subjects\":[\"Math\",\"Science\"]}";

        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(List.class, new CustomListDeserializer())
                        .create();

        Student student = gson.fromJson(json, Student.class);
        
        System.out.println("Student Name: " + student.name);
        System.out.println("Subjects: " + student.subjects);
    }
}

class Student {
    String name;
    int age;
    List<String> subjects;
}

class CustomListDeserializer implements JsonDeserializer<List<String>> {
    @Override
    public List<String> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonArray jsonArray = json.getAsJsonArray();
        // Custom logic: Convert all subjects to uppercase
        for (JsonElement element : jsonArray) {
            element.getAsString().toUpperCase();
        }
        return context.deserialize(json, typeOfT);
    }
}

আউটপুট:

Student Name: John
Subjects: [MATH, SCIENCE]

Gson দিয়ে Nested Collection Serialization এবং Deserialization খুবই সহজ। আপনি List, Set, Map ইত্যাদি নেস্টেড কালেকশন খুব সহজেই সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে পারেন। এছাড়া, আপনি যদি বিশেষ ধরনের কাস্টম লজিক প্রয়োগ করতে চান, তবে JsonSerializer এবং JsonDeserializer ব্যবহার করে সেটা করতে পারেন।

Content added By

Gson ব্যবহার করে Complex JSON Structure হ্যান্ডল করা সম্ভব। Complex JSON-এর মধ্যে বিভিন্ন ধরনের nested objects, arrays, এবং dynamic data থাকতে পারে। Gson সহজেই এই ধরনের JSON ডেটা হ্যান্ডল করতে পারে, তবে এর জন্য কিছু কাস্টমাইজড ক্লাস এবং কাস্টম সিরিয়ালাইজেশন/ডিজিরিয়ালাইজেশন কৌশল প্রয়োজন হতে পারে।

আমরা এখানে কয়েকটি উদাহরণ দিয়ে দেখাবো কীভাবে Gson ব্যবহার করে Complex JSON Structure হ্যান্ডল করা যায়।


১. JSON Structure: Nested Objects এবং Arrays

যেমন Complex JSON:

{
    "name": "John",
    "age": 30,
    "address": {
        "street": "123 Main St",
        "city": "New York"
    },
    "phoneNumbers": [
        {
            "type": "home",
            "number": "123-456-7890"
        },
        {
            "type": "mobile",
            "number": "987-654-3210"
        }
    ]
}

Java Classes:

import java.util.List;

public class PhoneNumber {
    private String type;
    private String number;

    // Getters and Setters
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}

public class Address {
    private String street;
    private String city;

    // Getters and Setters
    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

public class Person {
    private String name;
    private int age;
    private Address address;
    private List<PhoneNumber> phoneNumbers;

    // Getters and Setters
    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;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public List<PhoneNumber> getPhoneNumbers() {
        return phoneNumbers;
    }

    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }
}

Gson ব্যবহার করে Complex JSON থেকে Object তৈরি করা:

import com.google.gson.Gson;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Complex JSON String
        String json = "{"
                + "\"name\":\"John\","
                + "\"age\":30,"
                + "\"address\":{"
                + "\"street\":\"123 Main St\","
                + "\"city\":\"New York\""
                + "},"
                + "\"phoneNumbers\":["
                + "{"
                + "\"type\":\"home\","
                + "\"number\":\"123-456-7890\""
                + "},"
                + "{"
                + "\"type\":\"mobile\","
                + "\"number\":\"987-654-3210\""
                + "}]"
                + "}";

        // Gson Object
        Gson gson = new Gson();
        
        // JSON String কে Java Object এ রূপান্তর
        Person person = gson.fromJson(json, Person.class);
        
        // Output the object data
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
        System.out.println("Street: " + person.getAddress().getStreet());
        System.out.println("City: " + person.getAddress().getCity());
        
        // Loop through phoneNumbers
        List<PhoneNumber> phoneNumbers = person.getPhoneNumbers();
        for (PhoneNumber phoneNumber : phoneNumbers) {
            System.out.println("Phone (" + phoneNumber.getType() + "): " + phoneNumber.getNumber());
        }
    }
}

Output:

Name: John
Age: 30
Street: 123 Main St
City: New York
Phone (home): 123-456-7890
Phone (mobile): 987-654-3210

এখানে, phoneNumbers একটি List হিসেবে তৈরি করা হয়েছে এবং address একটি nested object হিসেবে কাজ করেছে।


২. JSON Structure: Dynamic Keys

যতটুকু দেখা যাচ্ছে, কখনও কখনও JSON ডেটাতে dynamic বা পরিবর্তনশীল কীগুলি থাকতে পারে। Gson এর মাধ্যমে আপনি এই ধরনের JSON হ্যান্ডল করতে পারেন, তবে আপনাকে কিছু কাস্টম ডিজিরিয়ালাইজার তৈরি করতে হতে পারে।

যেমন JSON:

{
    "id": 1,
    "data": {
        "name": "John",
        "age": 30
    },
    "extraInfo": {
        "hobbies": ["reading", "traveling"],
        "isActive": true
    }
}

Java Classes:

import java.util.Map;

public class DynamicJsonExample {
    private int id;
    private Map<String, Object> data;
    private Map<String, Object> extraInfo;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Map<String, Object> getData() {
        return data;
    }

    public void setData(Map<String, Object> data) {
        this.data = data;
    }

    public Map<String, Object> getExtraInfo() {
        return extraInfo;
    }

    public void setExtraInfo(Map<String, Object> extraInfo) {
        this.extraInfo = extraInfo;
    }
}

Gson ব্যবহার করে Dynamic JSON থেকে Object তৈরি করা:

import com.google.gson.Gson;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        // JSON String with dynamic keys
        String json = "{"
                + "\"id\":1,"
                + "\"data\":{"
                + "\"name\":\"John\","
                + "\"age\":30"
                + "},"
                + "\"extraInfo\":{"
                + "\"hobbies\":[\"reading\",\"traveling\"],"
                + "\"isActive\":true"
                + "}"
                + "}";

        // Gson Object
        Gson gson = new Gson();
        
        // JSON String কে Java Object এ রূপান্তর
        DynamicJsonExample example = gson.fromJson(json, DynamicJsonExample.class);
        
        // Output the object data
        System.out.println("ID: " + example.getId());
        
        // Access data dynamically
        Map<String, Object> data = example.getData();
        System.out.println("Name: " + data.get("name"));
        System.out.println("Age: " + data.get("age"));
        
        // Access extraInfo dynamically
        Map<String, Object> extraInfo = example.getExtraInfo();
        System.out.println("Hobbies: " + extraInfo.get("hobbies"));
        System.out.println("Is Active: " + extraInfo.get("isActive"));
    }
}

Output:

ID: 1
Name: John
Age: 30
Hobbies: [reading, traveling]
Is Active: true

এখানে, data এবং extraInfo মানগুলির জন্য Map ব্যবহার করা হয়েছে, যাতে আপনি JSON এর ডাইনামিক কীগুলির মধ্যে যেকোনো তথ্য অ্যাক্সেস করতে পারেন।


Gson দিয়ে Complex JSON Structures হ্যান্ডল করা খুবই সহজ এবং নমনীয়। এর মাধ্যমে আপনি:

  • Nested objects এবং arrays সহজে ম্যানেজ করতে পারেন।
  • Dynamic JSON keys এর মাধ্যমে ডেটার মধ্যে পরিবর্তনশীল তথ্য গ্রহণ করতে পারেন।
  • কাস্টম সিরিয়ালাইজেশন এবং ডিজিরিয়ালাইজেশন কৌশল প্রয়োগ করে আরও উন্নত হ্যান্ডলিং সম্ভব।

Gson খুবই লাইটওয়েট এবং কার্যকরী, যা আপনাকে জটিল JSON স্ট্রাকচারকে সহজে পার্স এবং প্রক্রিয়া করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...