Invalid JSON এবং Missing Fields হ্যান্ডল করা

Gson এবং Error Handling - জিসন (Gson) - Java Technologies

355

Gson-এ Invalid JSON এবং Missing Fields হ্যান্ডল করা একটি সাধারণ কিন্তু গুরুত্বপূর্ণ টপিক, বিশেষত যখন আপনি JSON ডেটা থেকে Java অবজেক্টে রূপান্তর করছেন। এই পরিস্থিতিগুলো মোকাবেলা করার জন্য আপনাকে custom error handling এবং null safety ব্যবহার করতে হতে পারে।

Invalid JSON হ্যান্ডলিং

Invalid JSON-এর ক্ষেত্রে, Gson JsonParseException ছুড়ে দেয়। আপনি এই এক্সসেপশনটি কাস্টমাইজ করে বা সঠিকভাবে হ্যান্ডল করে JSON প্যার্সিং প্রক্রিয়া চালাতে পারেন।

1. Invalid JSON Example:

ধরা যাক, আপনি একটি Person ক্লাস তৈরি করেছেন:

class Person {
    String name;
    int age;
}

এখন, যদি JSON ডেটা ভুলভাবে ফর্ম্যাট করা হয়, যেমন:

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

এখানে age একটি স্ট্রিং হিসাবে দেওয়া হয়েছে, অথচ age একটি ইন্টিজার হওয়া উচিত।

Error Handling for Invalid JSON:

import com.google.gson.*;

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

        Gson gson = new Gson();
        try {
            Person person = gson.fromJson(json, Person.class);
            System.out.println(person.name + " " + person.age);
        } catch (JsonSyntaxException e) {
            System.out.println("Invalid JSON: " + e.getMessage());
        }
    }
}

Output:

Invalid JSON: java.lang.NumberFormatException: For input string: "thirty"

এখানে, JsonSyntaxException এর মাধ্যমে invalid JSON ত্রুটি সঠিকভাবে হ্যান্ডল করা হয়েছে।

2. Missing Fields হ্যান্ডলিং

Missing fields-এর ক্ষেত্রে, Gson null বা default values ব্যবহার করে। আপনি চাইলে কাস্টম JsonDeserializer ব্যবহার করে মিসিং ফিল্ডের জন্য ডিফল্ট মান দিতে পারেন।

Missing Fields Example:

ধরা যাক, Person ক্লাসে name, age, এবং email ফিল্ড রয়েছে, এবং আপনি যদি JSON ডেটাতে email ফিল্ড না পান, তাহলে আপনি একটি ডিফল্ট মান সেট করতে চান।

class Person {
    String name;
    int age;
    String email;

    public Person(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }
}

এখন, যদি JSON ডেটা থেকে email ফিল্ড মিসিং থাকে:

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

Custom Deserializer for Missing Fields:

import com.google.gson.*;
import java.lang.reflect.Type;

public 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();
        int age = jsonObject.get("age").getAsInt();
        
        // If email is missing, set a default value
        String email = jsonObject.has("email") ? jsonObject.get("email").getAsString() : "default@example.com";
        
        return new Person(name, age, email);
    }
}

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"John\",\"age\":30}";
        
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Person.class, new PersonDeserializer()) // Custom Deserializer
                        .create();

        Person person = gson.fromJson(json, Person.class);
        System.out.println(person.name + ", " + person.age + ", " + person.email);
    }
}

Output:

John, 30, default@example.com

এখানে, email ফিল্ড মিসিং থাকলে আমরা সেটিকে default@example.com দিয়ে প্রতিস্থাপন করেছি।

3. Gson এর সাথে Optional Fields হ্যান্ডলিং:

যদি আপনি চান যে JSON ডেটা থেকে Optional fields স্বয়ংক্রিয়ভাবে null মান গ্রহণ করুক, তাহলে আপনি @SerializedName অ্যানোটেশন ব্যবহার করতে পারেন, বা JSON ডেটা ডেসিরিয়ালাইজ করার সময় Optional টাইপ ব্যবহার করতে পারেন।

Optional Fields Example:

import com.google.gson.annotations.SerializedName;

class Person {
    String name;
    int age;
    
    @SerializedName("email")  // Optional field with default value
    String email = "default@example.com";
}

এখানে, যদি email ফিল্ড JSON ডেটাতে না থাকে, তবে email ফিল্ডে default@example.com মান দেওয়া হবে।

4. Gson থেকে Custom Error Handling

আপনি চাইলে Gson এর মাধ্যমে কাস্টম error handling মেকানিজমও তৈরি করতে পারেন, যেখানে JSON ডেটা প্রসেস করার সময় বিশেষভাবে কিছু কাস্টম মেসেজ অথবা এক্সসেপশন রোল আউট করা হয়। নিচে একটি উদাহরণ:

import com.google.gson.*;
import java.lang.reflect.Type;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"John\", \"age\":\"invalidAge\"}"; // Invalid value for age

        Gson gson = new Gson();
        try {
            Person person = gson.fromJson(json, Person.class);
            System.out.println(person.name + ", " + person.age);
        } catch (JsonSyntaxException e) {
            System.out.println("Custom Error - Invalid JSON Format: " + e.getMessage());
        }
    }
}

Output:

Custom Error - Invalid JSON Format: java.lang.NumberFormatException: For input string: "invalidAge"

সংক্ষেপে:

  1. Invalid JSON Handling: Invalid JSON প্যার্সিং করার সময় JsonSyntaxException বা JsonParseException ব্যবহার করে ত্রুটি হ্যান্ডল করা হয়।
  2. Missing Fields Handling: Missing fields-এর জন্য আপনি custom deserializer ব্যবহার করে ডিফল্ট মান প্রদান করতে পারেন।
  3. Optional Fields: Optional fields-এর জন্য আপনি Optional টাইপ বা @SerializedName অ্যানোটেশন ব্যবহার করতে পারেন, যাতে মিসিং ফিল্ডে ডিফল্ট মান ব্যবহার করা হয়।
  4. Error Handling: Gson দিয়ে JSON ডেসিরিয়ালাইজ করার সময় কাস্টম এক্সসেপশন হ্যান্ডলিং করা যেতে পারে, যা আপনি স্পেসিফিক ত্রুটি বার্তা দিতে পারেন।

এভাবে invalid JSON এবং missing fields হ্যান্ডল করে আপনি আরও নির্ভরযোগ্য এবং প্রেডিক্টেবল JSON প্রক্রিয়াকরণ করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...