Gson-এ JSON Parsing Exception সাধারণত ঘটে যখন JSON ডেটা সঠিক ফরম্যাটে না থাকে বা কোনো অপ্রত্যাশিত সমস্যা ঘটে, যেমন অবৈধ টাইপের ডেটা, সঠিক JSON স্ট্রাকচার না থাকা ইত্যাদি। Gson JSON ডেটা পার্সিং করতে গিয়ে JsonParseException বা JsonSyntaxException ছুঁড়ে দেয় যদি JSON সঠিকভাবে ফরম্যাট না হয়।
নিচে কিছু সাধারণ JSON Parsing Exception এবং তাদের সম্ভাব্য সমাধানগুলো আলোচনা করা হলো।
1. Invalid JSON Format (অবৈধ JSON ফরম্যাট)
একটি সাধারণ সমস্যা হলো JSON ডেটা সঠিকভাবে ফরম্যাট করা না হওয়া। উদাহরণস্বরূপ, যদি JSON অবজেক্টের মধ্যে অতিরিক্ত কমা থাকে বা বন্ধনী সঠিকভাবে বন্ধ না থাকে, তাহলে পার্সিং সমস্যা হতে পারে।
উদাহরণ:
String invalidJson = "{\"name\":\"John\", \"age\":30,}"; // অতিরিক্ত কমা
Gson gson = new Gson();
Person person = gson.fromJson(invalidJson, Person.class); // JsonSyntaxException হবে
সমাধান:
JSON ফরম্যাট সঠিকভাবে চেক করুন এবং অতিরিক্ত কমা বা ভুল বন্ধনী (brackets) বাদ দিন। সঠিক JSON ফরম্যাট হবে:
{"name":"John", "age":30}
2. Mismatched Data Types (ডেটা টাইপের অসঙ্গতি)
যখন JSON ডেটা থেকে ডেসিরিয়ালাইজ করা হয় এবং অবজেক্টের মধ্যে প্রত্যাশিত টাইপের সাথে ডেটা টাইপ মেলে না, তখন JsonSyntaxException হতে পারে।
উদাহরণ:
String json = "{\"name\":\"John\", \"age\":\"thirty\"}"; // 'age' একটি স্ট্রিং, কিন্তু এটি একটি সংখ্যা হওয়া উচিত
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class); // JsonSyntaxException
সমাধান:
সুনির্দিষ্ট টাইপের সাথে মিলিয়ে JSON ডেটা প্রদান করুন। age এখানে একটি integer হওয়া উচিত।
{"name":"John", "age":30}
এবং Person ক্লাসে নিশ্চিত করুন যে age একটি int বা Integer টাইপ।
3. Missing Required Fields (আবশ্যক ক্ষেত্রের অনুপস্থিতি)
যদি আপনি JSON ডেটার মধ্যে required ফিল্ড মিস করেন এবং সেই ফিল্ডের জন্য কোনো ডিফল্ট মান বা কাস্টম হ্যান্ডলিং না থাকে, তবে Gson ডেসিরিয়ালাইজ করার সময় ত্রুটি সৃষ্টি হতে পারে।
উদাহরণ:
String json = "{\"name\":\"John\"}"; // age ফিল্ড অনুপস্থিত
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class); // JsonSyntaxException হতে পারে যদি age ফিল্ড মিসিং থাকে
সমাধান:
আপনি যদি required ফিল্ডের জন্য ডিফল্ট মান ব্যবহার করতে চান, তাহলে GsonBuilder এ @SerializedName বা @Expose ব্যবহার করতে পারেন, অথবা কাস্টম Deserializer তৈরি করতে পারেন। অথবা null মানের জন্য ডিফল্ট মানে Optional বা Integer টাইপ ব্যবহার করুন।
4. Unexpected JSON Structure (অপ্রত্যাশিত JSON স্ট্রাকচার)
কিছু সময় JSON ডেটা স্ট্রাকচার আপনার প্রোগ্রামের কাঠামো অনুযায়ী নাও থাকতে পারে। উদাহরণস্বরূপ, যদি আপনি একটি List এর মধ্যে একটি অবজেক্ট প্রাপ্ত হওয়ার প্রত্যাশা করেন কিন্তু একটি JSON অবজেক্ট বা অ্যারে অন্যভাবে আসে, তাহলে পার্সিং এর সময় JsonSyntaxException ঘটতে পারে।
উদাহরণ:
String json = "{\"person\": {\"name\":\"John\", \"age\":30}}"; // এটি একটি nested object
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class); // JsonSyntaxException যদি Person এর জন্য প্রপার কাঠামো না থাকে
সমাধান:
এই সমস্যাটি Person ক্লাসের জন্য কাঠামো মেলাতে হবে এবং @SerializedName ব্যবহার করতে হতে পারে।
class Person {
private String name;
private int age;
@SerializedName("person") // nested object এর জন্য সঠিক name উল্লেখ করুন
private Person person;
// getter/setter methods
}
5. Invalid JSON Format (অবৈধ ফরম্যাটে String, Boolean বা Null Value)
যদি JSON ফরম্যাটে একটি null, boolean, বা string টাইপের ভুল উপস্থাপন থাকে, তাহলে পার্সিং এর সময় ত্রুটি হতে পারে।
উদাহরণ:
String json = "{\"name\":null, \"age\":30}";
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class); // যদি null ফিল্ড হ্যান্ডলিং না করা হয়
সমাধান:
আপনি যদি null মানকে সঠিকভাবে হ্যান্ডেল করতে চান, তাহলে GsonBuilder-এ serializeNulls() ফিচার ব্যবহার করতে পারেন অথবা কাস্টম Deserializer তৈরি করে এটি হ্যান্ডেল করতে পারেন।
6. NullPointerException বা TypeMismatchException
যদি আপনি ভুল টাইপের ডেটা পাঠানোর চেষ্টা করেন (যেমন, একটি JSON অ্যারে পাঠানোর সময় যখন আপনি একটি অবজেক্টের জন্য ডেসিরিয়ালাইজ করার চেষ্টা করছেন), তখন NullPointerException বা TypeMismatchException দেখা দিতে পারে।
উদাহরণ:
String json = "[{\"name\":\"John\", \"age\":30}]"; // JSON অ্যারে
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class); // TypeMismatchException
সমাধান:
এটি List হিসেবে ডেসিরিয়ালাইজ করুন যদি JSON অ্যারে থাকে।
String json = "[{\"name\":\"John\", \"age\":30}]";
Gson gson = new Gson();
List<Person> personList = gson.fromJson(json, new TypeToken<List<Person>>() {}.getType()); // সঠিক টাইপ ব্যবহার
7. Common Parsing Exception এবং তাদের সমাধান
| Exception | সমস্যা | সমাধান |
|---|---|---|
| JsonSyntaxException | JSON ফরম্যাট সঠিক না হওয়া (অতিরিক্ত কমা, বন্ধনী সমস্যা) | JSON ডেটা ফরম্যাট ঠিক করে দিন। |
| JsonParseException | অবৈধ JSON টাইপ বা কাঠামো (যেমন, ডেটা টাইপ মেলে না) | JSON ডেটার কাঠামো সঠিক করুন, ফিল্ডের টাইপ ঠিক করুন। |
| TypeMismatchException | টাইপের মধ্যে অসঙ্গতি (যেমন, একটি string দেয়া হচ্ছে, কিন্তু এটি Integer হওয়া উচিত) | সঠিক টাইপ নিশ্চিত করুন, ডেটা ফরম্যাট চেক করুন। |
| NullPointerException | null মান ডেসিরিয়ালাইজ করতে গিয়ে সমস্যা | null মানের জন্য ডিফল্ট মান ব্যবহারের জন্য কাস্টম Deserializer তৈরি করুন। |
| ValidationException | JSON Schema যাচাই করতে গিয়ে সমস্যা | JSON Schema এর কাঠামো সঠিকভাবে তৈরি এবং মিলিয়ে JSON ডেটা পাঠান। |
সারাংশ
Gson-এ JSON Parsing Exception সাধারণত JSON ডেটার ফরম্যাট, টাইপের অসঙ্গতি, বা কাঠামোর ভুল কারণে হয়। আপনি এই ধরনের ত্রুটিগুলি সঠিকভাবে ট্রাবলশুট করতে পারেন:
- JSON ডেটার ফরম্যাট সঠিক কিনা চেক করুন।
- টাইপ মেলানো এবং কাঠামো ঠিক করতে কাস্টম Deserializer/Serializer ব্যবহার করুন।
- Gson-এ সঠিক TypeToken ব্যবহার করে অ্যারে এবং অবজেক্ট ডেসিরিয়ালাইজ করতে ভুলবেন না।
Read more