Org.JSON লাইব্রেরি ব্যবহার করার সময় JSONException একটি সাধারণ ত্রুটি যা ঘটে যখন JSON ডেটা প্রক্রিয়াকরণে কোনো সমস্যা হয়। এটি মূলত JSONObject বা JSONArray এর অপারেশনগুলির মাধ্যমে ঘটে থাকে। JSONException সাধারণত তখন দেখা দেয় যখন আপনি JSON ডেটার স্ট্রিং ম্যানিপুলেট বা পার্স করার চেষ্টা করেন এবং কিছু ভুল হয় যেমন অবৈধ JSON স্ট্রিং বা কীগুলোর অসামঞ্জস্য।
এখানে আমরা JSONException এর কিছু সাধারণ কারণ এবং সেই ত্রুটিগুলো এড়ানোর জন্য কীভাবে প্রতিরোধ করা যায়, তা আলোচনা করব।
JSONException এর সাধারণ কারণ
অবৈধ JSON স্ট্রিং
JSON স্ট্রিং যদি অবৈধ হয়, যেমন সঠিকভাবে কোষ-চিহ্ন (quotes) ব্যবহার না করা বা অতিরিক্ত কমা (comma) থাকা, তবে JSONException ঘটবে।
উদাহরণ: অবৈধ JSON স্ট্রিং
String jsonString = "{\"name\":\"John\", age:30}"; JSONObject jsonObject = new JSONObject(jsonString);এখানে,
age:30সঠিক JSON স্ট্রিং নয় কারণ কীগুলোর চারপাশে ডাবল কোটেশন চিহ্ন থাকতে হবে।সমাধান: JSON স্ট্রিং সঠিকভাবে ফরম্যাট করা প্রয়োজন, যেখানে কীগুলো অবশ্যই ডাবল কোটেশনে থাকতে হবে।
String jsonString = "{\"name\":\"John\", \"age\":30}"; JSONObject jsonObject = new JSONObject(jsonString);অবিদ্যমান কীগুলি এক্সেস করা
যদি আপনি এমন কোনো কী (key) এক্সেস করার চেষ্টা করেন যা JSON অবজেক্টে বিদ্যমান নয়, তবে JSONException হবে।
উদাহরণ:
JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "Alice"); String city = jsonObject.getString("city"); // "city" কী নেই, JSONException ঘটবেএখানে,
"city"কী বিদ্যমান নয়, তাই JSONException হবে।সমাধান: আপনি
optString()বাhas()মেথড ব্যবহার করতে পারেন যা কীগুলি বিদ্যমান কিনা তা পরীক্ষা করে এবং ত্রুটি এড়ায়।if (jsonObject.has("city")) { String city = jsonObject.getString("city"); }ডেটা টাইপের অসামঞ্জস্য
যদি আপনি এমন একটি টাইপ এক্সপেক্ট করেন যা আসলে JSON ডেটাতে নেই, যেমন স্ট্রিং এর জায়গায় ইনটিজার, তবে JSONException ঘটবে।
উদাহরণ:
String jsonString = "{\"age\":25}"; JSONObject jsonObject = new JSONObject(jsonString); String age = jsonObject.getString("age"); // "age" আসলে ইনটিজার, JSONException ঘটবেএখানে
"age"কীগুলোর মান একটি ইনটিজার, কিন্তুgetString()মেথড স্ট্রিং এক্সপেক্ট করছে।সমাধান: যদি আপনি নিশ্চিত না হন যে কীগুলোর মান ঠিক কী ধরনের, তাহলে
optString()বাoptInt()ব্যবহার করা উচিত।int age = jsonObject.optInt("age", 0); // Default value 0অসঙ্গত অ্যারে ইনডেক্স এক্সেস
JSONArray এর মধ্যে একটি ইনডেক্সে থাকা ডেটা এক্সেস করতে গেলে যদি ওই ইনডেক্সটি অবৈধ হয় বা অ্যারের আকারের বাইরে থাকে, তবে JSONException ঘটবে।
উদাহরণ:
String jsonArrayString = "[\"apple\", \"banana\"]"; JSONArray jsonArray = new JSONArray(jsonArrayString); String fruit = jsonArray.getString(3); // ইনডেক্স 3 অ্যারের বাইরে, JSONException ঘটবেএখানে, ইনডেক্স 3 একটি ভুল ইনডেক্স কারণ অ্যারেতে মোট ২টি আইটেম রয়েছে (ইনডেক্স 0 এবং 1)।
সমাধান: ইনডেক্স চেক করতে আগে অ্যারের সাইজ যাচাই করতে হবে।
if (jsonArray.length() > 3) { String fruit = jsonArray.getString(3); }অবৈধ কাস্টম অবজেক্ট এক্সট্র্যাকশন
যদি আপনি JSONObject থেকে কাস্টম অবজেক্ট বা এমন কোনো কাস্টম ডেটা টাইপ এক্সট্র্যাক্ট করতে চান যেটি JSON ফরম্যাটে মাপসই না হয়, তবে JSONException ঘটবে।
উদাহরণ:
String jsonString = "{\"person\": {\"name\": \"John\", \"age\": 25}}"; JSONObject jsonObject = new JSONObject(jsonString); Person person = jsonObject.get("person"); // JSONException হবে, কারণ Person অবজেক্ট নয়এখানে, আপনি JSON অবজেক্টের মধ্যে
Personক্লাসের অবজেক্ট পাচ্ছেন, যা ভুল টাইপ।সমাধান: কাস্টম অবজেক্ট পার্স করার আগে JSON স্ট্রিংকে সঠিকভাবে কাস্টম টাইপে রূপান্তরিত করা প্রয়োজন।
JSONObject personObject = jsonObject.getJSONObject("person"); String name = personObject.getString("name");
JSONException প্রতিরোধের কৌশল
- সঠিক JSON ফরম্যাটে ডেটা সরবরাহ: JSON ডেটা সঠিকভাবে ফরম্যাট করা উচিত যাতে JSON স্ট্রিং বা অবজেক্ট বৈধ থাকে এবং কোনো সিনট্যাক্স ত্রুটি না ঘটে।
has() মেথড ব্যবহার করা:
has()মেথডের মাধ্যমে আপনি চেক করতে পারেন যে কোনো কী JSON অবজেক্টে উপস্থিত কিনা। এটি JSONException প্রতিরোধ করতে সাহায্য করে।if (jsonObject.has("age")) { int age = jsonObject.getInt("age"); }opt() মেথড ব্যবহার করা:
optString(),optInt()ইত্যাদি মেথড ব্যবহার করে আপনি যদি কী না থাকে তাহলে একটি ডিফল্ট মান পেতে পারেন, যা JSONException প্রতিরোধ করবে।String name = jsonObject.optString("name", "Unknown"); // Default value "Unknown" int age = jsonObject.optInt("age", 0); // Default value 0- অ্যারে ইনডেক্স চেক করা: যখন JSON অ্যারে থেকে ডেটা এক্সট্র্যাক্ট করতে হবে, তখন অ্যারের আকার চেক করে নিশ্চিত করুন যে ইনডেক্সটি বৈধ।
- ডেটা টাইপের সঠিকতা যাচাই করা:
opt()মেথড ব্যবহার করুন যাতে আপনি ডেটার টাইপ পরীক্ষা করতে পারেন এবং সঠিক মান পেতে পারেন। এটি টাইপের অমিলের কারণে JSONException প্রতিরোধ করবে।
সারাংশ
JSONException হলো Org.JSON লাইব্রেরি ব্যবহার করার সময় ঘটে যাওয়া একটি সাধারণ ত্রুটি, যা মূলত অবৈধ JSON ডেটা, কীগুলোর উপস্থিতি না থাকা, ডেটার টাইপের অসামঞ্জস্য, বা অ্যারের ইনডেক্সের বাইরে যাওয়ার কারণে ঘটে। এই ত্রুটিগুলি প্রতিরোধ করতে সঠিক JSON ফরম্যাট, has() ও opt() মেথড ব্যবহার, এবং অ্যারে বা কীগুলির সাথে কাজ করার আগে যাচাই করা উচিত।