Skill

JSON থেকে Java Object (Deserialization)

জ্যাকসন (Jackson) - Java Technologies

248

Jackson একটি জনপ্রিয় Java library যা JSON ডেটা এবং Java objects এর মধ্যে রূপান্তর করার জন্য ব্যবহৃত হয়। Deserialization হল একটি প্রক্রিয়া যেখানে JSON ডেটাকে Java object এ রূপান্তর করা হয়। Jackson এই প্রক্রিয়াটি খুব সহজ এবং কার্যকরভাবে সম্পন্ন করতে সাহায্য করে।

এখানে JSON থেকে Java Object (Deserialization) এর ধারণা এবং উদাহরণ দেওয়া হল।


1. Jackson এর মাধ্যমে JSON থেকে Java Object (Deserialization)

Jackson তে Deserialization করার জন্য সাধারণত ObjectMapper ক্লাস ব্যবহার করা হয়, যা JSON ডেটাকে Java object এ রূপান্তর করে।

Step-by-Step Process:

  1. প্রথমে ObjectMapper ক্লাস ব্যবহার করে JSON string বা JSON file পার্স করা হয়।
  2. তারপর এটি Java object এ convert করা হয়।
  3. JSON এর প্রতিটি key এবং value সম্পর্কিত Java object's properties এ ম্যাপ করা হয়।

2. JSON থেকে Java Object এ Deserialization Example

Example 1: Simple Java Object Deserialization

ধরা যাক, আমাদের একটি JSON string আছে এবং আমরা সেটি একটি Java object তে রূপান্তর করতে চাই।

JSON String:

{
  "name": "John",
  "age": 30
}

Java Class (POJO):

public class Person {
    private String name;
    private int age;

    // Getter and Setter methods
    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;
    }
}

Deserialization Code:

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        try {
            // JSON string
            String jsonString = "{\"name\":\"John\", \"age\":30}";

            // Create ObjectMapper instance
            ObjectMapper objectMapper = new ObjectMapper();

            // Deserialize JSON to Java object
            Person person = objectMapper.readValue(jsonString, Person.class);

            // Print the Java object
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

Name: John
Age: 30

Explanation:

  • এখানে ObjectMapper.readValue() মেথড ব্যবহার করে JSON string কে Person ক্লাসের Java object এ রূপান্তর করা হয়েছে।
  • Person ক্লাসে name এবং age প্রপার্টি গুলি JSON এর key-র সাথে মেলে।

3. JSON থেকে Java Object তে Deserialization with Annotations

Jackson এর annotations ব্যবহার করে JSON থেকে Java object এর প্রপার্টি ম্যানিপুলেট করা যেতে পারে, যেমন @JsonProperty, @JsonIgnore, ইত্যাদি।

Example 2: Using @JsonProperty Annotation

import com.fasterxml.jackson.annotation.JsonProperty;

public class Person {
    @JsonProperty("full_name")
    private String name;

    @JsonProperty("years_old")
    private int age;

    // Getter and Setter methods
    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;
    }
}

JSON String:

{
  "full_name": "John",
  "years_old": 30
}

Deserialization Code:

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        try {
            // JSON string with different field names
            String jsonString = "{\"full_name\":\"John\", \"years_old\":30}";

            // Create ObjectMapper instance
            ObjectMapper objectMapper = new ObjectMapper();

            // Deserialize JSON to Java object
            Person person = objectMapper.readValue(jsonString, Person.class);

            // Print the Java object
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

Name: John
Age: 30

Explanation:

  • @JsonProperty ব্যবহার করে JSON এর field names কাস্টমাইজ করা হয়েছে এবং তা Java object এর প্রপার্টি-এ মান ম্যাপ করা হয়েছে।

4. Handling Nested JSON Objects

Jackson তে আপনি সহজেই nested JSON objects কে Java objects তে রূপান্তর করতে পারেন। এক্ষেত্রে nested objects এর জন্য nested classes বা composition ব্যবহার করতে হয়।

Example 3: Deserialization of Nested JSON Object

JSON String:

{
  "name": "John",
  "address": {
    "street": "123 Main St",
    "city": "New York"
  }
}

Java Class (POJO):

public class Person {
    private String name;
    private Address address;

    // Getter and Setter methods
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Address getAddress() {
        return address;
    }

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

class Address {
    private String street;
    private String city;

    // Getter and Setter methods
    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;
    }
}

Deserialization Code:

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        try {
            // Nested JSON string
            String jsonString = "{\"name\":\"John\", \"address\":{\"street\":\"123 Main St\", \"city\":\"New York\"}}";

            // Create ObjectMapper instance
            ObjectMapper objectMapper = new ObjectMapper();

            // Deserialize JSON to Java object
            Person person = objectMapper.readValue(jsonString, Person.class);

            // Print the Java object
            System.out.println("Name: " + person.getName());
            System.out.println("Street: " + person.getAddress().getStreet());
            System.out.println("City: " + person.getAddress().getCity());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

Name: John
Street: 123 Main St
City: New York

Explanation:

  • এখানে Person ক্লাসের মধ্যে Address নামে একটি nested object রয়েছে, যা JSON এর address অংশের সাথে মেলে।

5. Handling Array or List in JSON

Example 4: Deserialization of JSON Array

JSON String:

[
  {"name": "John", "age": 30},
  {"name": "Jane", "age": 25}
]

Java Class (POJO):

public class Person {
    private String name;
    private int age;

    // Getter and Setter methods
    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;
    }
}

Deserialization Code:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        try {
            // JSON Array string
            String jsonString = "[{\"name\": \"John\", \"age\": 30}, {\"name\": \"Jane\", \"age\": 25}]";

            // Create ObjectMapper instance
            ObjectMapper objectMapper = new ObjectMapper();

            // Deserialize JSON Array to List of Person objects
            List<Person> people = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){});

            // Print the list of Person objects
            for (Person person : people) {
                System.out.println("Name: " + person.getName() + ", Age: " + person.getAge());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

Name: John, Age: 30
Name: Jane, Age: 25

Explanation:

  • এখানে TypeReference ব্যবহার করে JSON অ্যারের উপাদানগুলোকে List তে রূপান্তর করা হয়েছে।

Jackson এর মাধ্যমে JSON থেকে Java Object (Deserialization) একটি খুব সহজ এবং শক্তিশালী প্রক্রিয়া। ObjectMapper ক্লাস ব্যবহার করে আপনি JSON ডেটাকে সহজেই Java objects এ রূপান্তর করতে পারেন। Jackson এর annotations, streaming, tree model, এবং custom deserializers ব্যবহার করে আপনি JSON ডেটার সাথে আরও কাস্টমাইজড এবং দক্ষভাবে কাজ করতে পারবেন।

Content added By

Jackson হল একটি জনপ্রিয় JSON প্রসেসিং লাইব্রেরি যা Java Object থেকে JSON এবং JSON থেকে Java Object রূপান্তরের জন্য ব্যবহৃত হয়। Jackson এর মাধ্যমে আপনি সহজেই JSON ডেটা থেকে Java Object তৈরি করতে পারবেন। এই প্রক্রিয়াটিকে বলা হয় deserialization, যেখানে JSON ডেটা Java Object এ রূপান্তরিত হয়।

এই গাইডে, আমরা Jackson ব্যবহার করে কীভাবে একটি Simple JSON থেকে Java Object তৈরি করা যায় তা দেখব।


Step 1: Jackson ডিপেনডেন্সি যোগ করা

Jackson লাইব্রেরি ব্যবহার করতে হলে প্রথমে আপনাকে এটি আপনার প্রোজেক্টে যোগ করতে হবে। আপনি যদি Maven বা Gradle ব্যবহার করেন, তবে নিচের ডিপেনডেন্সি যোগ করতে হবে।

Maven Dependency

<dependencies>
    <!-- Jackson Databind (JSON to Java Object and vice versa) -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.14.2</version> <!-- Latest version -->
    </dependency>
</dependencies>

Gradle Dependency

dependencies {
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2'  // Latest version
}

Step 2: Simple JSON String তৈরি করা

Jackson দিয়ে Java Object তৈরি করার জন্য প্রথমে একটি JSON স্ট্রিং তৈরি করতে হবে। নিচে একটি সিম্পল JSON স্ট্রিং এর উদাহরণ দেওয়া হলো:

{
    "firstName": "John",
    "lastName": "Doe",
    "age": 30
}

এই JSON স্ট্রিংটি আমরা Java Object এ রূপান্তর করব।


Step 3: Java Object তৈরি করা

ধরা যাক, আমরা একটি Person নামক Java ক্লাস তৈরি করতে যাচ্ছি যা এই JSON ডেটার সাথে মানানসই হবে। আমাদের Person ক্লাসে তিনটি ফিল্ড থাকবে: firstName, lastName, এবং age

Java Class তৈরি করা

public class Person {
    private String firstName;
    private String lastName;
    private int age;

    // Default constructor
    public Person() {}

    // Getters and Setters
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Step 4: JSON থেকে Java Object তৈরি করা (Deserialization)

এখন আমরা Jackson এর ObjectMapper ক্লাস ব্যবহার করে JSON থেকে Person Java Object তৈরি করব।

Code Example: JSON থেকে Java Object তৈরি করা

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) {
        // JSON string
        String jsonString = "{\"firstName\":\"John\", \"lastName\":\"Doe\", \"age\":30}";

        // Create an instance of ObjectMapper
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            // Convert JSON string to Java Object
            Person person = objectMapper.readValue(jsonString, Person.class);

            // Print the Java Object
            System.out.println("First Name: " + person.getFirstName());
            System.out.println("Last Name: " + person.getLastName());
            System.out.println("Age: " + person.getAge());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Explanation:

  • ObjectMapper: Jackson এর প্রধান ক্লাস যা JSON থেকে Java Object রূপান্তর এবং Java Object থেকে JSON রূপান্তর করতে ব্যবহৃত হয়।
  • readValue() method: JSON স্ট্রিংকে Java Object এ রূপান্তর করতে ব্যবহৃত হয়। এখানে Person.class প্যারামিটার হিসাবে দিয়ে আমরা JSON এর ডেটাকে Person ক্লাসের Java Object এ রূপান্তর করেছি।

Output:

First Name: John
Last Name: Doe
Age: 30

Step 5: Error Handling

যখন JSON ডেটা ভ্যালিড না থাকে বা Java Object এর সাথে মেলে না, তখন Jackson এক্সপেশন থ্রো করতে পারে। এই ধরনের ক্ষেত্রে আপনি try-catch ব্লক ব্যবহার করে এর error handling করতে পারেন, যেমন আমরা উপরে দেখেছি।


Step 6: Jackson Annotations ব্যবহার করা (Optional)

Jackson এর কিছু annotations রয়েছে যা আপনাকে serialization এবং deserialization কাস্টমাইজ করতে সাহায্য করে। উদাহরণস্বরূপ, আপনি JSON ফিল্ডের নাম কাস্টমাইজ করতে পারেন, বা কিছু ফিল্ডকে JSON থেকে বাদ দিতে পারেন।

Example: Jackson Annotations

import com.fasterxml.jackson.annotation.JsonProperty;

public class Person {
    @JsonProperty("first_name")
    private String firstName;

    @JsonProperty("last_name")
    private String lastName;

    private int age;

    // Getters and Setters
}

এখানে @JsonProperty অ্যানোটেশনটি JSON এর কীগুলিকে কাস্টমাইজ করে (যেমন, first_name এবং last_name)।


Jackson হল একটি অত্যন্ত শক্তিশালী লাইব্রেরি যা JSON থেকে Java Object এবং Java Object থেকে JSON রূপান্তর করতে ব্যবহৃত হয়। এই গাইডে, আমরা দেখেছি কীভাবে একটি সিম্পল JSON স্ট্রিং থেকে Java Object তৈরি করতে হয় Jackson লাইব্রেরি ব্যবহার করে। Jackson এর ObjectMapper এর মাধ্যমে আপনি JSON ডেটা সহজেই Java Object এ রূপান্তর করতে পারেন। এছাড়া, Jackson এর annotations এর মাধ্যমে আপনি আপনার JSON ডেটা কাস্টমাইজ করতে পারেন।

Content added By

Jackson লাইব্রেরি JSON ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার জন্য ব্যবহৃত হয়। আপনি যদি Nested JSON (অর্থাৎ, JSON অবজেক্টের মধ্যে আরেকটি অবজেক্ট থাকে) থেকে Java Object তৈরি করতে চান, তাহলে Jackson তাও খুব সহজে করতে পারে।

এখানে, Nested JSON থেকে Java Object ডেসিরিয়ালাইজ করার জন্য একটি উদাহরণ দেয়া হলো।


Step 1: Nested JSON উদাহরণ

ধরা যাক, আমাদের কাছে একটি Nested JSON রয়েছে যা একটি User অবজেক্টের মধ্যে Address অবজেক্ট অন্তর্ভুক্ত।

Nested JSON Example:

{
    "name": "John",
    "age": 30,
    "address": {
        "street": "123 Main St",
        "city": "Springfield",
        "zipcode": "12345"
    }
}

এটি একটি User অবজেক্ট যেটির মধ্যে আরেকটি Address অবজেক্ট রয়েছে।


Step 2: Java Class তৈরি করা

Nested JSON কে Java Object এ কনভার্ট করার জন্য, প্রথমে আমরা দুটি ক্লাস তৈরি করব:

  1. User ক্লাস
  2. Address ক্লাস

Address.java:

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

    // 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 String getZipcode() {
        return zipcode;
    }

    public void setZipcode(String zipcode) {
        this.zipcode = zipcode;
    }
}

User.java:

public class User {
    private String name;
    private int age;
    private Address address; // Nested Address object

    // 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;
    }
}
  • User.java ক্লাসের মধ্যে একটি Address অবজেক্ট রয়েছে, যেটি Nested JSON এর জন্য মানানসই।

Step 3: Jackson দিয়ে JSON ডেটা ডেসিরিয়ালাইজ করা

এখন, আমরা Jackson এর মাধ্যমে এই Nested JSON ডেটাকে Java Object এ কনভার্ট করব।

Main.java:

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        try {
            // JSON String representing the nested JSON
            String json = "{\n" +
                    "    \"name\": \"John\",\n" +
                    "    \"age\": 30,\n" +
                    "    \"address\": {\n" +
                    "        \"street\": \"123 Main St\",\n" +
                    "        \"city\": \"Springfield\",\n" +
                    "        \"zipcode\": \"12345\"\n" +
                    "    }\n" +
                    "}";

            // Create ObjectMapper instance
            ObjectMapper objectMapper = new ObjectMapper();

            // Deserialize the JSON string to Java Object
            User user = objectMapper.readValue(json, User.class);

            // Print out the details of the User object
            System.out.println("Name: " + user.getName());
            System.out.println("Age: " + user.getAge());
            System.out.println("Address: " + user.getAddress().getStreet() + ", " +
                    user.getAddress().getCity() + ", " + user.getAddress().getZipcode());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Explanation:

  • ObjectMapper: Jackson এর মূল ক্লাস যা JSON ডেটাকে Java Object এ ডেসিরিয়ালাইজ এবং Java Object কে JSON এ সিরিয়ালাইজ করতে ব্যবহৃত হয়।
  • readValue(): এই মেথডটি JSON String কে Java Object এ কনভার্ট করতে ব্যবহৃত হয়।
  • এখানে User.class পাস করা হয়েছে, যা নির্দেশ করে যে আমরা JSON ডেটাকে User ক্লাসে ডেসিরিয়ালাইজ করতে চাই।

Step 4: Output

উপরের কোডটি চালানোর পর, আউটপুটটি হবে:

Name: John
Age: 30
Address: 123 Main St, Springfield, 12345

Step 5: Jackson এর অ্যানোটেশন ব্যবহার করা (Optional)

Jackson এর কিছু অ্যানোটেশন ব্যবহার করে আপনি JSON এর ফিল্ডের নাম কাস্টমাইজ করতে পারেন, যেমন আপনি JSON ফিল্ডের নাম Java Object ফিল্ডের নামের সাথে মেলাতে চান না। এজন্য Jackson এর @JsonProperty অ্যানোটেশন ব্যবহার করা যায়।

User.java (with @JsonProperty):

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
    @JsonProperty("name")
    private String name;
    @JsonProperty("age")
    private int age;
    @JsonProperty("address")
    private Address address;

    // 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;
    }
}

এটি শুধুমাত্র অ্যানোটেশন ব্যবহার করার মাধ্যমে JSON Property এবং Java Property নামের মধ্যে মিল নিশ্চিত করে।


Jackson লাইব্রেরি দিয়ে Nested JSON থেকে Java Object তৈরি করা খুব সহজ। আপনি ObjectMapper এর মাধ্যমে JSON ডেটাকে Java Objects এ ডেসিরিয়ালাইজ এবং Java Objects কে JSON ডেটা সিরিয়ালাইজ করতে পারেন। এর মাধ্যমে আপনি আপনার JSON ডেটা সংরক্ষণ এবং প্রক্রিয়া সহজভাবে করতে পারবেন।

  • ObjectMapper ব্যবহার করে JSON কে Java Object এ কনভার্ট করা।
  • Nested JSON এর জন্য সম্পর্কিত ক্লাস গুলি তৈরি করা।
  • Jackson এর অ্যানোটেশন দিয়ে JSON ফিল্ডের নাম কাস্টমাইজ করা।

এটি Jackson ব্যবহার করে Nested JSON থেকে Java Objects তৈরির একটি সাধারণ এবং কার্যকরী পদ্ধতি।

Content added By

Jackson হল একটি শক্তিশালী JSON প্রসেসিং লাইব্রেরি যা Java Objects এবং JSON এর মধ্যে কনভার্সন পরিচালনা করতে ব্যবহৃত হয়। আপনি Collections (যেমন List, Map) কে Java Objects এ কনভার্ট করতে পারেন Jackson এর সাহায্যে। এখানে আমরা List এবং Map কিভাবে Java Objects এ কনভার্ট করতে পারি তা দেখাব।


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

ধরা যাক আপনার একটি List আছে যা কিছু Person অবজেক্ট ধারণ করে, এবং আপনি এই List কে JSON এ কনভার্ট করতে চান এবং তারপর JSON থেকে Java Objects এ ফিরে আসতে চান।

A. Java Class তৈরি করা:

প্রথমে, আমরা একটি Person ক্লাস তৈরি করব যা আমাদের List এর উপাদান হিসেবে কাজ করবে।

public class Person {
    private String name;
    private int age;

    // Constructor, Getters, Setters
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }
}

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

এখন আমরা একটি List তৈরি করব যা Person অবজেক্ট ধারণ করবে এবং তারপর Jackson ObjectMapper ব্যবহার করে এই List কে JSON এ কনভার্ট করব।

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        try {
            // Create List of Person objects
            List<Person> personList = new ArrayList<>();
            personList.add(new Person("John", 25));
            personList.add(new Person("Jane", 30));

            // Create ObjectMapper instance
            ObjectMapper objectMapper = new ObjectMapper();

            // Convert List to JSON string
            String json = objectMapper.writeValueAsString(personList);

            // Print JSON string
            System.out.println(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

[{"name":"John","age":25},{"name":"Jane","age":30}]

C. JSON থেকে List Object এ কনভার্ট করা:

এখন যদি আপনি JSON স্ট্রিং থেকে List অবজেক্টে কনভার্ট করতে চান, তাহলে এটি করা যাবে নিম্নলিখিতভাবে:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        try {
            // Sample JSON string
            String json = "[{\"name\":\"John\",\"age\":25},{\"name\":\"Jane\",\"age\":30}]";

            // Create ObjectMapper instance
            ObjectMapper objectMapper = new ObjectMapper();

            // Convert JSON string to List of Person objects
            List<Person> personList = objectMapper.readValue(json, new TypeReference<List<Person>>(){});

            // Print List objects
            for (Person person : personList) {
                System.out.println(person.getName() + " is " + person.getAge() + " years old.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

John is 25 years old.
Jane is 30 years old.

2. Map কে Object এ কনভার্ট করা

Jackson ব্যবহার করে Map (যেমন HashMap) কে Java Object (যেমন Person) এ কনভার্ট করা সম্ভব।

A. Java Class তৈরি করা:

আমরা আগের মতো Person ক্লাসটি ব্যবহার করব।

B. Map কে JSON এ কনভার্ট করা:

এখন একটি Map তৈরি করব যা String এবং Object হিসেবে মান ধারণ করবে এবং তারপর আমরা এই Map কে JSON স্ট্রিং এ কনভার্ট করব।

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        try {
            // Create Map with Person object
            Map<String, Person> personMap = new HashMap<>();
            personMap.put("person1", new Person("John", 25));
            personMap.put("person2", new Person("Jane", 30));

            // Create ObjectMapper instance
            ObjectMapper objectMapper = new ObjectMapper();

            // Convert Map to JSON string
            String json = objectMapper.writeValueAsString(personMap);

            // Print JSON string
            System.out.println(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

{"person1":{"name":"John","age":25},"person2":{"name":"Jane","age":30}}

C. JSON থেকে Map Object এ কনভার্ট করা:

এখন JSON স্ট্রিং থেকে Map অবজেক্টে কনভার্ট করার জন্য নিচের কোড ব্যবহার করতে পারেন।

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        try {
            // Sample JSON string
            String json = "{\"person1\":{\"name\":\"John\",\"age\":25},\"person2\":{\"name\":\"Jane\",\"age\":30}}";

            // Create ObjectMapper instance
            ObjectMapper objectMapper = new ObjectMapper();

            // Convert JSON string to Map
            Map<String, Person> personMap = objectMapper.readValue(json, new TypeReference<Map<String, Person>>(){});

            // Print Map objects
            for (Map.Entry<String, Person> entry : personMap.entrySet()) {
                Person person = entry.getValue();
                System.out.println(entry.getKey() + ": " + person.getName() + " is " + person.getAge() + " years old.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output:

person1: John is 25 years old.
person2: Jane is 30 years old.

Jackson ব্যবহার করে আপনি Collection (List, Map) কে Java Objects এ কনভার্ট করতে পারেন এবং vice versa। Jackson এর সাহায্যে ObjectMapper ব্যবহার করে আপনি:

  1. List এবং Map অবজেক্টগুলি JSON স্ট্রিং এ কনভার্ট করতে পারেন।
  2. JSON থেকে List এবং Map অবজেক্টে কনভার্ট করতে পারেন।

Jackson এর সাথে এই কনভার্সন প্রক্রিয়া খুবই সহজ এবং দ্রুত, এবং এটি Java Applications এ JSON ডেটার সাথে কাজ করার জন্য অন্যতম জনপ্রিয় টুল।

Content added By

Jackson একটি শক্তিশালী লাইব্রেরি যা Java objects এবং JSON এর মধ্যে ডেটা রূপান্তরের জন্য ব্যবহৃত হয়। তবে, কখনও কখনও আমাদের JSON ডেটার কিছু নির্দিষ্ট ফরম্যাট থাকে যা default deserialization পদ্ধতির মাধ্যমে রূপান্তর করা যায় না। এমন পরিস্থিতিতে custom deserialization ব্যবহার করা হয়।

Custom Deserialization এর মাধ্যমে আপনি Jackson-কে নির্দেশ দিতে পারেন কিভাবে JSON থেকে Java objects তৈরি করা হবে। এটি তখন ব্যবহার করা হয় যখন JSON ফরম্যাট এবং Java object এর মধ্যে কিছু কাস্টম মাপের বা প্রক্রিয়ার প্রয়োজন।

এখানে Jackson এর মাধ্যমে Custom Deserialization এর প্রক্রিয়া আলোচনা করা হলো।


1. Custom Deserialization এর জন্য প্রস্তুতি

ধরা যাক, আমাদের একটি Person ক্লাস আছে এবং আমরা birthdate ফিল্ডের JSON ডেটাকে কাস্টমভাবে ডেসিরিয়ালাইজ করতে চাই, কারণ এটি yyyy-MM-dd ফরম্যাটে রয়েছে, কিন্তু আমাদের Java LocalDate ফরম্যাটে এটি রাখতে হবে।

Person Class (with LocalDate)

import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDate;

public class Person {
    private String name;
    private LocalDate birthDate;

    // Constructor, getters, and setters
    public Person(String name, LocalDate birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }

    public String getName() {
        return name;
    }

    public LocalDate getBirthDate() {
        return birthDate;
    }
}

এই ক্লাসে birthDate হল একটি LocalDate টাইপের ফিল্ড, যা JSON ফরম্যাটে yyyy-MM-dd আকারে আসবে।


2. Custom Deserializer তৈরি করা

Jackson আপনাকে custom deserializer তৈরি করার সুযোগ দেয় যা JSON ডেটাকে আপনার পছন্দমতো Java object-এ রূপান্তর করবে।

Step 1: Create a Custom Deserializer

আপনি JsonDeserializer ইন্টারফেস ব্যবহার করে একটি কাস্টম ডেসিরিয়ালাইজার তৈরি করতে পারেন। এখানে আমরা LocalDate এর জন্য কাস্টম deserializer তৈরি করব।

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class LocalDateDeserializer extends JsonDeserializer<LocalDate> {

    @Override
    public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String date = p.getText();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        return LocalDate.parse(date, formatter);
    }
}
  • Explanation:
    • LocalDateDeserializer ক্লাসটি JsonDeserializer থেকে ইনহেরিট করেছে এবং deserialize() মেথডে JSON ডেটাকে yyyy-MM-dd ফরম্যাটে LocalDate এ রূপান্তর করছে।

3. Custom Deserializer ব্যবহার করা

এখন, আমরা আমাদের Person ক্লাসের birthDate ফিল্ডে Custom Deserializer অ্যাপ্লাই করব। এটি করার জন্য আমরা @JsonDeserialize অ্যানোটেশন ব্যবহার করব।

Step 2: Apply the Custom Deserializer to the birthDate field

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.time.LocalDate;

public class Person {
    private String name;

    @JsonDeserialize(using = LocalDateDeserializer.class)
    private LocalDate birthDate;

    // Constructor, getters, and setters
    public Person(String name, LocalDate birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }

    public String getName() {
        return name;
    }

    public LocalDate getBirthDate() {
        return birthDate;
    }
}
  • Explanation:
    • @JsonDeserialize(using = LocalDateDeserializer.class) অ্যানোটেশনটি birthDate ফিল্ডে কাস্টম LocalDateDeserializer ব্যবহার করতে বলে, যাতে JSON ডেটাকে কাস্টম ফরম্যাটে LocalDate এ রূপান্তর করা হয়।

4. Deserialization Example

এখন, আমরা Person ক্লাসের একটি JSON রূপে ডেসিরিয়ালাইজ করার উদাহরণ দেখব।

Example JSON:

{
  "name": "John Doe",
  "birthDate": "1990-05-15"
}

Deserialization Code:

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) throws Exception {
        String json = "{\"name\":\"John Doe\",\"birthDate\":\"1990-05-15\"}";

        ObjectMapper objectMapper = new ObjectMapper();
        
        // Deserialize JSON to Person object
        Person person = objectMapper.readValue(json, Person.class);
        
        System.out.println("Name: " + person.getName());
        System.out.println("BirthDate: " + person.getBirthDate());
    }
}
  • Explanation:
    • এখানে ObjectMapper ব্যবহার করে JSON ডেটাকে Person অবজেক্টে রূপান্তর করা হচ্ছে। কাস্টম LocalDateDeserializer এর মাধ্যমে birthDate ফিল্ডটি সঠিকভাবে ডেসিরিয়ালাইজ হবে।

Output:

Name: John Doe
BirthDate: 1990-05-15

5. Using Jackson Mixins for Custom Deserialization (Optional)

যদি আপনি কোনো ক্লাস পরিবর্তন না করে কাস্টম ডেসিরিয়ালাইজার যোগ করতে চান, তবে Jackson Mixins ব্যবহার করতে পারেন। এটি আপনাকে একটি existing class এ কাস্টম ডেসিরিয়ালাইজার অ্যাসাইন করতে সাহায্য করবে, যেখানে আপনি সেই ক্লাসের সোর্স কোডে কোন পরিবর্তন না করে কাজ করতে পারবেন।

Mixin Example:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

public class Main {
    public static void main(String[] args) throws Exception {
        String json = "{\"name\":\"John Doe\",\"birthDate\":\"1990-05-15\"}";

        // Create ObjectMapper and register Mixin
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.addMixIn(Person.class, PersonMixin.class);
        
        // Deserialize JSON to Person object
        Person person = objectMapper.readValue(json, Person.class);
        
        System.out.println("Name: " + person.getName());
        System.out.println("BirthDate: " + person.getBirthDate());
    }

    @JsonDeserialize(using = LocalDateDeserializer.class)
    private abstract static class PersonMixin {}
}
  • Explanation:
    • এখানে আমরা PersonMixin ব্যবহার করছি যা LocalDateDeserializer অ্যাসাইন করেছে, এবং এটি Person ক্লাসের উপর প্রভাব ফেলবে, তবে কোনো পরিবর্তন ছাড়াই।

Jackson-এর মাধ্যমে Custom Deserialization ব্যবহারের ফলে আপনি JSON ডেটার একটি কাস্টম ফরম্যাটে রূপান্তর করতে পারেন, যা আপনার Java ক্লাসের সাথে সঠিকভাবে মাপ খায়। আপনি JsonDeserializer ইন্টারফেস ব্যবহার করে কাস্টম ডেসিরিয়ালাইজার তৈরি করতে পারেন এবং Jackson এর @JsonDeserialize অ্যানোটেশন ব্যবহার করে তা আপনার Java ক্লাসে অ্যাপ্লাই করতে পারেন।

  • Custom Deserialization Jackson এর সবচেয়ে শক্তিশালী বৈশিষ্ট্যগুলোর একটি, যা আপনার কোডের নমনীয়তা এবং কাস্টমাইজেশন ক্ষমতা বৃদ্ধি করে।
  • Jackson Mixins ব্যবহার করে আপনি ক্লাসের সোর্স কোডে কোনো পরিবর্তন না করেও কাস্টম ডেসিরিয়ালাইজার অ্যাপ্লাই করতে পারেন।

Jackson এর custom deserialization ফিচারটি আপনাকে JSON ডেটার জটিল কাঠামো হ্যান্ডেল করতে সহায়তা করবে এবং আপনার কোড আরও শক্তিশালী এবং নমনীয় করে তুলবে।

Content added By
Promotion

Are you sure to start over?

Loading...