Enum Mapping এবং Complex JSON Structure

Gson এবং Enums ব্যবস্থাপনা - জিসন (Gson) - Java Technologies

379

Gson ব্যবহার করে JSON ডেটার সাথে Enum Mapping এবং Complex JSON Structure পরিচালনা করা যায়। Gson এ Enum এবং Complex JSON Structure ম্যানিপুলেশন একটি সাধারণ কিন্তু গুরুত্বপূর্ণ কাজ, বিশেষ করে যখন আপনি JSON ডেটাকে Java অবজেক্টে রূপান্তর করতে চান এবং এর মধ্যে এনাম বা জটিল (nested) স্ট্রাকচার থাকে।

এখানে, আমি Enum Mapping এবং Complex JSON Structure ম্যানিপুলেশনের উদাহরণসহ ব্যাখ্যা করবো।


1. Gson Enum Mapping

Enum একটি বিশেষ ধরনের ক্লাস যা সীমিত মান (constant) ধারণ করে। Gson আপনাকে JSON ডেটার সাথে Enum মান ম্যানিপুলেট করার সুযোগ দেয়।

Enum Mapping এর মাধ্যমে JSON থেকে Java Enum-এ রূপান্তর

এটি করার জন্য Gson আপনাকে EnumSerializer এবং EnumDeserializer ব্যবহার করার সুবিধা দেয়, অথবা সিম্পলভাবে @SerializedName অ্যানোটেশন ব্যবহার করেও JSON মানকে Enum-এর সাথে মাপা (map) করতে পারেন।

এনাম ক্লাস উদাহরণ:

enum Status {
    ACTIVE, INACTIVE, PENDING;
}

JSON উদাহরণ (with Enum):

{
    "status": "ACTIVE"
}

Java Class (with Enum):

class User {
    String name;
    Status status;

    public User(String name, Status status) {
        this.name = name;
        this.status = status;
    }

    @Override
    public String toString() {
        return "User{name='" + name + "', status=" + status + "}";
    }
}

Enum Mapping (Deserialize JSON to Java Enum):

import com.google.gson.*;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"Rahim\", \"status\":\"ACTIVE\"}";

        Gson gson = new Gson();

        // Deserialize JSON to Java Object with Enum mapping
        User user = gson.fromJson(json, User.class);
        System.out.println(user);
    }
}

আউটপুট:

User{name='Rahim', status=ACTIVE}

এখানে, status ফিল্ডটি "ACTIVE" স্ট্রিং মানে থাকা সত্ত্বেও Gson তা Status এনাম-এ রূপান্তরিত করেছে।

Custom Enum Mapping (Using @SerializedName)

কখনো কখনো আপনার JSON ফাইলের মান এনামের সাথে মেলানো কঠিন হতে পারে (যেমন, "active" মানটি "ACTIVE" এনামের সাথে মেলানো)। এই ক্ষেত্রে, আপনি @SerializedName অ্যানোটেশন ব্যবহার করতে পারেন।

enum Status {
    @SerializedName("active") ACTIVE,
    @SerializedName("inactive") INACTIVE,
    @SerializedName("pending") PENDING;
}

এখন JSON এর "active" মান "ACTIVE" এনামে ম্যাপ হবে।


2. Gson Complex JSON Structure (Nested JSON)

Complex JSON structure-এ বিভিন্ন nested objects এবং arrays থাকতে পারে। Gson সহজে এই ধরনের জটিল JSON কাঠামোকে Java অবজেক্টে রূপান্তর করতে সহায়তা করে।

Complex JSON Example (Nested Objects and Arrays)

JSON (Complex Structure):

{
  "user": {
    "name": "Rahim",
    "age": 30,
    "address": {
      "street": "123 Main St",
      "city": "Dhaka"
    },
    "phones": [
      "1234567890",
      "9876543210"
    ]
  }
}

এখানে, user একটি নেস্টেড অবজেক্ট এবং phones একটি অ্যারে।

Java Class for Complex Structure:

class Address {
    String street;
    String city;
}

class User {
    String name;
    int age;
    Address address;  // Nested object
    List<String> phones;  // Array

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + ", address=" + address + ", phones=" + phones + "}";
    }
}

Complex JSON Structure Deserialization:

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

public class Main {
    public static void main(String[] args) {
        String json = "{\"user\": {\"name\":\"Rahim\", \"age\":30, \"address\": {\"street\":\"123 Main St\", \"city\":\"Dhaka\"}, \"phones\": [\"1234567890\", \"9876543210\"]}}";
        
        // Create Gson object to parse JSON
        Gson gson = new Gson();
        
        // Deserialize JSON to Java object
        JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
        JsonObject userObject = jsonObject.getAsJsonObject("user");
        User user = gson.fromJson(userObject, User.class);
        
        // Print the deserialized user object
        System.out.println(user);
    }
}

আউটপুট:

User{name='Rahim', age=30, address=Address{street='123 Main St', city='Dhaka'}, phones=[1234567890, 9876543210]}

এখানে, Gson JSON এর user অবজেক্ট থেকে User ক্লাসের অবজেক্ট তৈরি করেছে এবং একইভাবে address একটি নেস্টেড অবজেক্ট এবং phones একটি অ্যারে হিসাবে রূপান্তরিত হয়েছে।


Complex JSON Structure with Custom Deserialization

কখনো কখনো আপনাকে একটি কাস্টম ডেসেরিয়ালাইজার ব্যবহার করতে হতে পারে, বিশেষত যদি JSON স্ট্রাকচার খুবই জটিল বা কাস্টম হয়।

Custom Deserializer for Complex JSON:

class CustomUserDeserializer implements JsonDeserializer<User> {
    @Override
    public User deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();
        JsonObject userJson = jsonObject.getAsJsonObject("user");
        
        String name = userJson.get("name").getAsString();
        int age = userJson.get("age").getAsInt();
        
        JsonObject addressJson = userJson.getAsJsonObject("address");
        Address address = new Address();
        address.street = addressJson.get("street").getAsString();
        address.city = addressJson.get("city").getAsString();
        
        List<String> phones = new Gson().fromJson(userJson.getAsJsonArray("phones"), List.class);
        
        User user = new User();
        user.name = name;
        user.age = age;
        user.address = address;
        user.phones = phones;
        
        return user;
    }
}

Using Custom Deserializer:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(User.class, new CustomUserDeserializer());
Gson gson = gsonBuilder.create();
User user = gson.fromJson(json, User.class);

এভাবে, আপনি কাস্টম ডেসেরিয়ালাইজার ব্যবহার করে জটিল JSON স্ট্রাকচারকে Java অবজেক্টে রূপান্তর করতে পারেন।


সারাংশ:

  1. Enum Mapping: Gson স্বাভাবিকভাবে JSON স্ট্রিংকে Java Enum-এ রূপান্তর করতে সহায়তা করে। আপনি @SerializedName অ্যানোটেশন ব্যবহার করে কাস্টম Enum মানও ম্যাপ করতে পারেন।
  2. Complex JSON Structure: Gson সহজে nested objects এবং arrays সহ complex JSON ডেটা Java অবজেক্টে রূপান্তর করতে সহায়তা করে। যদি JSON স্ট্রাকচার খুব জটিল হয়, তবে কাস্টম Deserializer ব্যবহার করে সেটি হ্যান্ডেল করা যায়।

Gson এই কাজগুলোকে খুবই সহজ এবং কার্যকরী করে তোলে, যা JSON এবং Java অবজেক্টের মধ্যে রূপান্তরকে অনেক দ্রুত এবং আরো কার্যকরী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...