RESTful API তে ডেটা সাধারণত JSON ফরম্যাটে প্রেরণ এবং গ্রহণ করা হয়। JSON.simple লাইব্রেরি ব্যবহার করে আপনি সহজেই REST API থেকে প্রাপ্ত JSON response পার্স (parse) করতে পারেন এবং তা Java Object এ রূপান্তর (deserialize) করতে পারেন।
এখানে, আমরা দেখব কিভাবে JSON.simple লাইব্রেরি ব্যবহার করে REST API response হ্যান্ডল করা যায়।
1. REST API থেকে JSON Response প্রাপ্তি
REST API তে JSON response পাওয়ার জন্য আমরা Java's HttpURLConnection বা Apache HttpClient লাইব্রেরি ব্যবহার করতে পারি। এখানে আমরা HttpURLConnection ব্যবহার করে একটি API থেকে JSON response প্রাপ্তির উদাহরণ দেখব।
উদাহরণ: JSON Response HTTP GET Request
ধরা যাক, একটি API রয়েছে যা ব্যবহারকারীর তথ্য JSON ফরম্যাটে প্রদান করে।
{
"name": "John Doe",
"age": 30,
"email": "johndoe@example.com"
}
Java কোড: REST API Response থেকে JSON Handling
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class RestApiJsonExample {
public static void main(String[] args) {
// API Endpoint URL
String url = "https://api.example.com/user/1"; // Replace with actual API URL
try {
// Create URL object and open connection
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// Set HTTP request method (GET)
con.setRequestMethod("GET");
// Get the response code
int responseCode = con.getResponseCode();
System.out.println("Response Code: " + responseCode);
// Read the response
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Parse the JSON response using JSON.simple
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(response.toString());
// Extract data from the JSON response
String name = (String) jsonObject.get("name");
long age = (long) jsonObject.get("age");
String email = (String) jsonObject.get("email");
// Print the extracted data
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Email: " + email);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- HttpURLConnection ব্যবহার করে একটি HTTP GET রিকোয়েস্ট পাঠানো হয়েছে।
- API থেকে প্রাপ্ত response-টি BufferedReader দিয়ে পড়া হয়েছে এবং একটি StringBuilder তে সংরক্ষণ করা হয়েছে।
- JSON.simple লাইব্রেরির JSONParser ব্যবহার করে JSON response টিকে JSONObject এ রূপান্তর করা হয়েছে।
- get() মেথড ব্যবহার করে name, age, এবং email কী-এর মান বের করা হয়েছে।
Output:
Response Code: 200
Name: John Doe
Age: 30
Email: johndoe@example.com
2. JSON Response Error Handling
একটি REST API response শুধুমাত্র সফল হতে পারে না, যদি response JSON ফরম্যাটে কোনো ত্রুটি থাকে, যেমন সার্ভার থেকে ত্রুটির বার্তা বা অবৈধ JSON, তখনও আপনাকে সেই ত্রুটিগুলি হ্যান্ডল করতে হবে।
Error Handling Example:
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class RestApiErrorHandlingExample {
public static void main(String[] args) {
// API Endpoint URL (Invalid Example)
String url = "https://api.example.com/invaliduser"; // Invalid endpoint to trigger error
try {
// Create URL object and open connection
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// Set HTTP request method (GET)
con.setRequestMethod("GET");
// Get the response code
int responseCode = con.getResponseCode();
System.out.println("Response Code: " + responseCode);
// Read the response
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Parse the JSON response using JSON.simple
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(response.toString());
// Extract data from the JSON response
String message = (String) jsonObject.get("message");
// Print the extracted data
System.out.println("Error Message: " + message);
} catch (Exception e) {
System.out.println("Error occurred while fetching data from API.");
e.printStackTrace();
}
}
}
Output in case of error:
Response Code: 404
Error occurred while fetching data from API.
এখানে:
- আমরা একটি ভুল URL ব্যবহার করেছি, যেটি 404 ত্রুটি কোড প্রদান করেছে।
- Exception Handling ব্যবহার করে ত্রুটির বার্তা আনা হয়েছে এবং প্রয়োজনীয় ব্যবস্থা নেওয়া হয়েছে।
3. JSON Response Validity Check
যেহেতু অনেক সময় API থেকে malformed JSON রেসপন্স আসতে পারে, তাই JSON validation প্রক্রিয়া খুবই গুরুত্বপূর্ণ। JSON.simple পার্সার ParseException ছুড়ে দেয় যখন JSON ফরম্যাটটি ভুল থাকে। আপনি এটি হ্যান্ডল করতে পারেন।
Invalid JSON Handling:
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class InvalidJsonHandlingExample {
public static void main(String[] args) {
// Malformed JSON response example
String invalidJsonString = "{name:\"John\", age:30}"; // Missing quotes around keys
try {
// Parse the invalid JSON string
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(invalidJsonString);
System.out.println(jsonObject.toJSONString());
} catch (ParseException e) {
System.out.println("Error: Invalid JSON format.");
e.printStackTrace();
}
}
}
Output:
Error: Invalid JSON format.
org.json.simple.parser.ParseException: ...
এখানে, একটি ভুল JSON স্ট্রিং দেওয়া হয়েছে যা সঠিকভাবে পার্স করা সম্ভব হয়নি এবং একটি ParseException ঘটেছে। আমরা ত্রুটির বার্তা প্রিন্ট করেছি এবং এর স্ট্যাক ট্রেস লগ করেছি।
- Json.simple লাইব্রেরি REST API response হ্যান্ডলিংয়ে সহায়ক এবং JSON ডেটা পার্স এবং ম্যানিপুলেট করার জন্য সহজ উপায় প্রদান করে।
- HttpURLConnection ব্যবহার করে API থেকে JSON রেসপন্স সংগ্রহ করা যায়, এবং সেই JSON ডেটা JSONParser দিয়ে পার্স করা যায়।
- JSON ফরম্যাট ত্রুটি বা ভুল থাকলে ParseException ব্যবহার করে সেই ত্রুটিগুলি সঠিকভাবে হ্যান্ডল করা উচিত।
- Error handling এবং validation প্রক্রিয়া ব্যবহারের মাধ্যমে আপনি API response থেকে malformed JSON বা ত্রুটি সঠিকভাবে হ্যান্ডল করতে পারবেন।
REST API থেকে JSON রেসপন্স পেয়ে সেই ডেটা Json.Simple লাইব্রেরি ব্যবহার করে পার্স করা একটি সাধারণ এবং কার্যকরী প্রক্রিয়া। সাধারণত, REST API গুলি JSON ফরম্যাটে ডেটা ফেরত দেয়, এবং Json.Simple লাইব্রেরি সেই JSON রেসপন্সকে Java অবজেক্টে রূপান্তর করতে সাহায্য করে।
এখানে আমরা দেখব কিভাবে একটি REST API থেকে JSON রেসপন্স নিয়ে Json.Simple লাইব্রেরি দিয়ে তা পার্স করা যায়।
1. Required Libraries
REST API থেকে JSON রেসপন্স পেতে আমরা HttpURLConnection অথবা Apache HttpClient লাইব্রেরি ব্যবহার করতে পারি। রেসপন্স পরবর্তীতে Json.Simple দিয়ে পার্স করা হবে।
Maven Dependencies:
<dependency>
<groupId>org.json.simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
2. JSON Response Parsing from REST API using HttpURLConnection
এই উদাহরণে আমরা HttpURLConnection ব্যবহার করে একটি REST API কল করব এবং Json.Simple লাইব্রেরি ব্যবহার করে JSON রেসপন্স পার্স করব।
Example: REST API JSON Response Parsing using HttpURLConnection
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class JsonApiParserExample {
public static void main(String[] args) {
try {
// REST API URL (JSON response)
String url = "https://jsonplaceholder.typicode.com/todos/1";
// Create URL object
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// Setting the request method
con.setRequestMethod("GET");
// Read the response
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Parse the JSON response
String jsonResponse = response.toString();
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(jsonResponse);
// Extract data from JSON
long userId = (long) jsonObject.get("userId");
long id = (long) jsonObject.get("id");
String title = (String) jsonObject.get("title");
boolean completed = (boolean) jsonObject.get("completed");
// Print the parsed JSON data
System.out.println("User ID: " + userId);
System.out.println("ID: " + id);
System.out.println("Title: " + title);
System.out.println("Completed: " + completed);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explanation:
- HttpURLConnection: ব্যবহার করে আমরা REST API থেকে GET রিকোয়েস্ট পাঠাচ্ছি এবং JSON রেসপন্স গ্রহণ করছি।
- BufferedReader: API থেকে JSON রেসপন্স পড়তে ব্যবহৃত হচ্ছে।
- JSONParser: Json.Simple লাইব্রেরি ব্যবহার করে JSON স্ট্রিং পার্স করা হচ্ছে।
- JSONObject: পার্স করা JSON রেসপন্স থেকে বিভিন্ন ফিল্ড এক্সট্র্যাক্ট করা হচ্ছে (যেমন
userId,id,title,completed)।
Output:
User ID: 1
ID: 1
Title: delectus aut autem
Completed: false
এখানে, আমরা https://jsonplaceholder.typicode.com/todos/1 URL থেকে JSON রেসপন্স পেয়ে তা পার্স করেছি। JSON রেসপন্সে userId, id, title, এবং completed ফিল্ড রয়েছে, যা পার্স করে প্রিন্ট করা হয়েছে।
3. JSON Response Parsing using Apache HttpClient
যদি আপনি Apache HttpClient ব্যবহার করতে চান, তাহলে আপনি এই লাইব্রেরি দিয়ে HTTP রিকোয়েস্ট করতে পারেন। এটি আরও উন্নত এবং সুবিধাজনক অপশন যখন আপনার বিভিন্ন ধরনের HTTP রিকোয়েস্ট করতে হয়, যেমন POST, PUT, DELETE ইত্যাদি।
Example: REST API JSON Response Parsing using Apache HttpClient
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.CloseableHttpClient;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class JsonApiWithHttpClient {
public static void main(String[] args) {
try (CloseableHttpClient client = HttpClients.createDefault()) {
// REST API URL
String url = "https://jsonplaceholder.typicode.com/todos/1";
// HTTP GET request
HttpGet request = new HttpGet(url);
// Execute the request
HttpResponse response = client.execute(request);
// Read the response
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuilder responseContent = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
responseContent.append(inputLine);
}
// Parse the JSON response
String jsonResponse = responseContent.toString();
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(jsonResponse);
// Extract and print data from JSON
long userId = (long) jsonObject.get("userId");
long id = (long) jsonObject.get("id");
String title = (String) jsonObject.get("title");
boolean completed = (boolean) jsonObject.get("completed");
System.out.println("User ID: " + userId);
System.out.println("ID: " + id);
System.out.println("Title: " + title);
System.out.println("Completed: " + completed);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explanation:
- Apache HttpClient: HTTP GET রিকোয়েস্ট তৈরি করা হয়েছে এবং সেটি execute করা হয়েছে।
- BufferedReader: API থেকে রেসপন্স পড়ে সেটিকে JSON স্ট্রিংতে রূপান্তর করা হয়েছে।
- JSONParser: JSON রেসপন্স পার্স করা হয়েছে এবং JSONObject তে রূপান্তরিত করা হয়েছে।
Output:
User ID: 1
ID: 1
Title: delectus aut autem
Completed: false
এখানে আমরা Apache HttpClient ব্যবহার করে JSON রেসপন্স পেয়েছি এবং Json.Simple দিয়ে পার্স করেছি।
4. Error Handling in REST API Parsing
Example: Error Handling with Invalid JSON Response
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class JsonErrorHandling {
public static void main(String[] args) {
String invalidJson = "{ \"name\": \"John\", \"age\": 30, }"; // Invalid JSON (trailing comma)
try {
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(invalidJson);
System.out.println(jsonObject.toJSONString());
} catch (ParseException e) {
System.out.println("Error: Invalid JSON format.");
e.printStackTrace();
}
}
}
Output:
Error: Invalid JSON format.
org.json.simple.parser.ParseException: Unexpected character '}' at position 30.
Error Handling:
- ParseException: যদি JSON অবজেক্ট বা অ্যারে ঠিকভাবে প্যার্স না করা যায় (যেমন, অতিরিক্ত কমা বা ভুল স্ট্রাকচার), ParseException ঘটবে।
- Exception Handling: try-catch ব্লক ব্যবহার করে আমরা এই ধরনের ত্রুটি ধরতে পারি এবং উপযুক্ত বার্তা প্রদর্শন করতে পারি।
- Json.Simple লাইব্রেরি ব্যবহার করে REST API থেকে প্রাপ্ত JSON রেসপন্স খুব সহজে পার্স করা যায়।
- HttpURLConnection এবং Apache HttpClient এর মাধ্যমে REST API থেকে JSON রেসপন্স প্রাপ্তি সম্ভব।
- JSONParser ব্যবহার করে JSON স্ট্রিংকে JSONObject বা JSONArray তে রূপান্তর করা হয়।
- Error Handling গুরুত্বপূর্ণ, কারণ বিভিন্ন ধরনের সমস্যা হতে পারে যেমন invalid JSON ফরম্যাট, পার্সিং ত্রুটি ইত্যাদি।
এই প্রক্রিয়া আপনার Java অ্যাপ্লিকেশনে RESTful API ইন্টিগ্রেশন এবং JSON ডেটা ম্যানিপুলেশনকে সহজ এবং নিরাপদ করে তোলে।
JSON.simple লাইব্রেরি ব্যবহৃত হয় JSON ডেটাকে Java Object এ রূপান্তর (deserialize) করার জন্য। সাধারণত, আপনি একটি JSON রেসপন্স পেতে পারেন (যেমন একটি API থেকে) এবং সেই রেসপন্সটি Java Object এ রূপান্তর করতে চান।
এটি করার জন্য, আপনাকে প্রথমে JSON রেসপন্সটি একটি JSON String আকারে পেতে হবে এবং তারপর JSON.simple লাইব্রেরি ব্যবহার করে তা একটি Java Object তে রূপান্তর করতে হবে।
নিচে আমরা দেখব কিভাবে একটি JSON রেসপন্সকে Java Object এ রূপান্তর করা যায়।
1. JSON Response কে Java Object এ রূপান্তর করার উদাহরণ
ধরা যাক, আমাদের কাছে একটি API থেকে পাওয়া JSON রেসপন্স আছে যা একটি ব্যক্তির তথ্য ধারণ করছে। আমরা সেই JSON রেসপন্সটিকে Java Object এ রূপান্তর করব।
JSON Response (API থেকে প্রাপ্ত)
{
"name": "John Doe",
"age": 30,
"isStudent": false,
"address": {
"street": "123 Main St",
"city": "New York",
"zipcode": "10001"
}
}
এটি একটি JSON রেসপন্স যা একটি ব্যক্তির নাম, বয়স, স্টুডেন্ট স্ট্যাটাস, এবং ঠিকানা ধারণ করছে।
2. Java Object তৈরি করা (Java POJO Class)
প্রথমে আমাদের একটি Java POJO (Plain Old Java Object) ক্লাস তৈরি করতে হবে যা JSON রেসপন্সের কাঠামো অনুযায়ী তৈরি হবে।
Person.java (Java POJO Class)
public class Person {
private String name;
private int age;
private boolean isStudent;
private Address address; // Nested Object
// 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;
}
public boolean isStudent() {
return isStudent;
}
public void setStudent(boolean isStudent) {
this.isStudent = isStudent;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
// Address class (Nested Object)
public static class Address {
private String street;
private String city;
private String zipcode;
// Getter and Setter methods for Address
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;
}
}
}
এখানে, আমরা Person নামক একটি POJO ক্লাস তৈরি করেছি যা name, age, isStudent, এবং একটি Address (nested object) ফিল্ড ধারণ করছে।
3. JSON Response কে Java Object এ রূপান্তর করা (Deserialization)
এখন আমরা JSON.simple লাইব্রেরি ব্যবহার করে JSON রেসপন্সটিকে Person অবজেক্টে রূপান্তর করব। এখানে আমরা JSONParser ব্যবহার করব এবং JSONObject এর মাধ্যমে JSON ডেটাকে Java Object এ রূপান্তর করব।
JSON Response কে Java Object এ রূপান্তর করার Java Code:
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class JsonToJavaExample {
public static void main(String[] args) {
// JSON Response (API থেকে পাওয়া)
String jsonString = "{\"name\":\"John Doe\",\"age\":30,\"isStudent\":false,\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"zipcode\":\"10001\"}}";
// JSONParser তৈরি করা
JSONParser parser = new JSONParser();
try {
// JSON String কে JSONObject তে রূপান্তর করা
JSONObject jsonObject = (JSONObject) parser.parse(jsonString);
// Person অবজেক্ট তৈরি করা
Person person = new Person();
person.setName((String) jsonObject.get("name"));
person.setAge(((Long) jsonObject.get("age")).intValue()); // JSON.simple returns Long, so convert to int
person.setStudent((Boolean) jsonObject.get("isStudent"));
// Nested Object (Address) পার্স করা
JSONObject addressJson = (JSONObject) jsonObject.get("address");
Person.Address address = new Person.Address();
address.setStreet((String) addressJson.get("street"));
address.setCity((String) addressJson.get("city"));
address.setZipcode((String) addressJson.get("zipcode"));
person.setAddress(address);
// Java Object থেকে মান প্রিন্ট করা
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
System.out.println("Is Student: " + person.isStudent());
System.out.println("Address: " + person.getAddress().getStreet() + ", " + person.getAddress().getCity() + ", " + person.getAddress().getZipcode());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- JSONParser ব্যবহার করে JSON স্ট্রিংটি JSONObject তে রূপান্তর করা হয়েছে।
- Person অবজেক্টে প্রতিটি ফিল্ড সেট করা হয়েছে, যেমন name, age, isStudent, এবং address।
- Address নামক নেস্টেড অবজেক্টটি Person অবজেক্টে যুক্ত করা হয়েছে এবং তার মান গুলি JSON থেকে বের করে সেট করা হয়েছে।
- Java Object থেকে মানগুলি কনসোলে প্রিন্ট করা হয়েছে।
Output:
Name: John Doe
Age: 30
Is Student: false
Address: 123 Main St, New York, 10001
এখানে, JSON রেসপন্সটি সফলভাবে Person অবজেক্টে রূপান্তরিত হয়েছে এবং তার সমস্ত তথ্য Java Object হিসেবে প্রিন্ট করা হয়েছে।
4. JSON Response কে Java Object এ রূপান্তর করতে Best Practices
- Proper Error Handling:
- ParseException এবং IOException এর মতো এক্সসেপশনগুলো সঠিকভাবে হ্যান্ডল করুন। JSON ডেটা পার্স করার সময় যে কোনো ভুল বা অপ্রত্যাশিত ডেটা একটি ParseException সৃষ্টি করতে পারে।
- Default Values:
- যদি কোনো কী JSON ডেটাতে না থাকে, তবে Java Object এ সেই ফিল্ডের জন্য default values সেট করুন, যেমন
nullঅথবা0বাfalse।
- যদি কোনো কী JSON ডেটাতে না থাকে, তবে Java Object এ সেই ফিল্ডের জন্য default values সেট করুন, যেমন
- Type Casting:
- JSON.simple Long টাইপ ফিরিয়ে দেয়, তাই int বা double টাইপে কাস্ট করার সময় সঠিক কাস্টিং ব্যবহার করুন।
- Validate JSON Structure:
- JSON ডেটা পার্স করার আগে এটি ভালভাবে ভ্যালিডেট করুন। JSON.simple এ সরাসরি ভ্যালিডেশন করা না গেলেও, আপনি JSON Schema ব্যবহার করে প্রি-ভ্যালিডেশন করতে পারেন।
- Use Libraries for Complex Objects:
- জটিল ডেটা স্ট্রাকচার বা বড় JSON রেসপন্সের জন্য, আপনি Jackson বা Gson এর মতো আরও শক্তিশালী JSON লাইব্রেরি ব্যবহার করতে পারেন, যা সিস্টেমে ডেটা বিনিময় এবং কনভার্শন আরও সহজ করে তোলে।
- JSON.simple লাইব্রেরি ব্যবহার করে JSON ডেটাকে Java Object এ রূপান্তর করা খুবই সহজ।
- JSONParser ব্যবহার করে JSON স্ট্রিংকে JSONObject তে রূপান্তর করা হয় এবং তারপর Java Object এ সেট করা হয়।
- Nested JSON Objects এবং JSON Arrays সহ complex JSON ডেটার জন্য Java POJO ক্লাস তৈরি করতে হয় যাতে JSON ডেটা সঠিকভাবে মডেল করা যায়।
- Java Object থেকে JSON রেসপন্স প্রাপ্তির জন্য এই লাইব্রেরি খুবই কার্যকরী এবং সহজ পদ্ধতি প্রদান করে।
JSON.simple লাইব্রেরি ব্যবহার করে API response এর মধ্যে nested JSON পার্স করা সহজ। API response সাধারণত JSON ফরম্যাটে আসে, এবং এতে বিভিন্ন nested JSON objects এবং JSON arrays থাকতে পারে। এই ডেটা পার্স করে আমরা যেকোনো মান বা অবজেক্ট Java objects বা JSONObject-এ রূপান্তর করতে পারি।
ধরা যাক, একটি API response আমাদের নিম্নলিখিত JSON ডেটা পাঠাচ্ছে:
{
"status": "success",
"data": {
"user": {
"id": 101,
"name": "John Doe",
"email": "johndoe@example.com"
},
"posts": [
{
"id": 1,
"title": "My First Post",
"content": "This is the content of the first post"
},
{
"id": 2,
"title": "Another Post",
"content": "This is the content of another post"
}
]
}
}
এখানে, "data" একটি নেস্টেড অবজেক্ট যা "user" এবং "posts" নামে দুটি কীগুলির মধ্যে বিভিন্ন ডেটা ধারণ করছে। আমাদের "user" অবজেক্ট এবং "posts" অ্যারে থেকে ডেটা বের করতে হবে।
Step-by-Step: Nested JSON Parsing with JSON.simple
Step 1: JSON Response Parsing
আমরা প্রথমে JSON response থেকে nested JSON পার্স করব এবং তারপর user এবং posts এর তথ্য বের করব।
Example Code: Nested JSON Parsing
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class NestedJsonParsingExample {
public static void main(String[] args) {
// API response JSON string (simulate a response from an API)
String apiResponse = "{"
+ "\"status\": \"success\","
+ "\"data\": {"
+ "\"user\": {\"id\": 101, \"name\": \"John Doe\", \"email\": \"johndoe@example.com\"},"
+ "\"posts\": ["
+ "{\"id\": 1, \"title\": \"My First Post\", \"content\": \"This is the content of the first post\"},"
+ "{\"id\": 2, \"title\": \"Another Post\", \"content\": \"This is the content of another post\"}"
+ "]"
+ "}"
+ "}";
// JSONParser to parse the JSON string
JSONParser parser = new JSONParser();
try {
// Parse the response into a JSONObject
JSONObject jsonObject = (JSONObject) parser.parse(apiResponse);
// Get the "data" object from the response
JSONObject data = (JSONObject) jsonObject.get("data");
// Parse user details (nested JSON object)
JSONObject user = (JSONObject) data.get("user");
Long userId = (Long) user.get("id");
String userName = (String) user.get("name");
String userEmail = (String) user.get("email");
// Parse posts (nested JSON array)
JSONArray posts = (JSONArray) data.get("posts");
// Print user details
System.out.println("User ID: " + userId);
System.out.println("User Name: " + userName);
System.out.println("User Email: " + userEmail);
// Iterate over the posts array and print post details
System.out.println("\nPosts:");
for (Object postObj : posts) {
JSONObject post = (JSONObject) postObj;
Long postId = (Long) post.get("id");
String postTitle = (String) post.get("title");
String postContent = (String) post.get("content");
System.out.println("Post ID: " + postId);
System.out.println("Post Title: " + postTitle);
System.out.println("Post Content: " + postContent);
System.out.println();
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- API Response: একটি সিমুলেটেড JSON স্ট্রিং তৈরি করা হয়েছে, যা API response হিসেবে ধরানো হচ্ছে।
- JSONParser: JSONParser ব্যবহার করে JSON স্ট্রিংটিকে JSONObject-এ রূপান্তর করা হয়েছে।
- Nested JSON Object:
dataঅবজেক্টের মধ্যে থাকা user অবজেক্ট এবং posts অ্যারে থেকে ডেটা বের করা হয়েছে। - Looping Through JSON Array: posts অ্যারে-তে থাকা প্রতিটি পোস্ট অবজেক্ট থেকে তথ্য বের করতে for loop ব্যবহার করা হয়েছে।
Output:
User ID: 101
User Name: John Doe
User Email: johndoe@example.com
Posts:
Post ID: 1
Post Title: My First Post
Post Content: This is the content of the first post
Post ID: 2
Post Title: Another Post
Post Content: This is the content of another post
Step 2: Handling Errors in JSON Parsing
JSON.simple লাইব্রেরি ব্যবহার করে JSON পার্স করার সময়ে কিছু ভুল ফরম্যাট বা ভুল ডেটার কারণে ParseException ঘটতে পারে। সঠিকভাবে এ ধরনের ত্রুটি হ্যান্ডেল করা অত্যন্ত গুরুত্বপূর্ণ।
Error Handling Example:
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class JsonParsingErrorHandling {
public static void main(String[] args) {
// Invalid JSON string (missing comma between values)
String invalidJsonString = "{\"status\":\"success\",\"data\":{\"user\":{\"id\":101,\"name\":\"John\" \"email\":\"john@example.com\"}}}";
// JSONParser to parse the JSON string
JSONParser parser = new JSONParser();
try {
// Attempt to parse the invalid JSON string
parser.parse(invalidJsonString);
} catch (ParseException e) {
// Handle invalid JSON format error
System.out.println("Error: Invalid JSON format");
e.printStackTrace();
}
}
}
Output:
Error: Invalid JSON format
org.json.simple.parser.ParseException: Expected ':' after field name at position 40
Step 3: Parsing Nested JSON with Different Data Types
আপনার API response-এ যদি বিভিন্ন ধরনের ডেটা থাকে (যেমন String, Long, Boolean, JSONArray), তবে সেগুলো সঠিকভাবে পার্স করতে হবে। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনি JSONArray তে থাকা nested JSON objects থেকে ডেটা বের করতে চান।
Example with Mixed Data Types:
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class MixedDataTypesParsing {
public static void main(String[] args) {
// Nested JSON response (mixed data types)
String jsonString = "{"
+ "\"status\": \"success\","
+ "\"data\": {"
+ "\"user\": {\"id\": 101, \"name\": \"John Doe\", \"isActive\": true},"
+ "\"posts\": ["
+ "{\"id\": 1, \"title\": \"First Post\", \"isPublished\": true},"
+ "{\"id\": 2, \"title\": \"Second Post\", \"isPublished\": false}"
+ "]"
+ "}"
+ "}";
// Parse and extract mixed data types
JSONParser parser = new JSONParser();
try {
JSONObject jsonObject = (JSONObject) parser.parse(jsonString);
// Extract user data
JSONObject data = (JSONObject) jsonObject.get("data");
JSONObject user = (JSONObject) data.get("user");
Long userId = (Long) user.get("id");
String userName = (String) user.get("name");
Boolean isActive = (Boolean) user.get("isActive");
// Extract posts
JSONArray posts = (JSONArray) data.get("posts");
for (Object postObj : posts) {
JSONObject post = (JSONObject) postObj;
Long postId = (Long) post.get("id");
String postTitle = (String) post.get("title");
Boolean isPublished = (Boolean) post.get("isPublished");
System.out.println("Post ID: " + postId);
System.out.println("Post Title: " + postTitle);
System.out.println("Is Published: " + isPublished);
System.out.println();
}
System.out.println("User ID: " + userId);
System.out.println("User Name: " + userName);
System.out.println("Is Active: " + isActive);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Output:
Post ID: 1
Post Title: First Post
Is Published: true
Post ID: 2
Post Title: Second Post
Is Published: false
User ID: 101
User Name: John Doe
Is Active: true
- Nested JSON Parsing: JSON.simple লাইব্রেরি ব্যবহার করে nested JSON objects এবং JSON arrays এর মধ্যে থাকা ডেটা সহজে পার্স করা যায়।
- Error Handling: JSON পার্সিংয়ের সময় ভুল ফরম্যাট বা ত্রুটিপূর্ণ ডেটার কারণে ParseException হতে পারে, তাই এই ত্রুটিগুলি হ্যান্ডল করা গুরুত্বপূর্ণ।
- Mixed Data Types: JSON ডেটা বিভিন্ন ধরনের ডেটা ধারণ করতে পারে (যেমন, String, Long, Boolean, JSONArray), এবং প্রতিটি ডেটা টাইপের জন্য সঠিক কাস্টমাইজেশন প্রয়োজন।
JSON.simple লাইব্রেরি ব্যবহার করে API response থেকে JSON ডেটা পার্স এবং ম্যানিপুলেশন খুবই কার্যকরী এবং সহজ, এবং এটি Java-এ JSON ডেটার সাথে কাজ করার জন্য একটি শক্তিশালী টুল।
এটি একটি সাধারণ উদাহরণ যেখানে আমরা JSON.simple লাইব্রেরি ব্যবহার করে একটি API response হ্যান্ডল করব। API response সাধারণত JSON ফরম্যাটে আসে, এবং আমাদের সেই JSON ডেটা পার্স (deserialize) করে Java objects-এ রূপান্তর করতে হয়।
ধরা যাক, আমাদের একটি API response এসেছে যেটি একজন ব্যবহারকারীর তথ্য প্রদান করে। সেই JSON response থেকে আমরা নাম, বয়স, ঠিকানা, এবং ফোন নম্বর বের করতে চাই।
API Response Example
এটি একটি API response যা JSON ফরম্যাটে এসেছে:
{
"status": "success",
"data": {
"id": 1,
"name": "John Doe",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"zipcode": "10001"
},
"phones": [
{"type": "home", "number": "123-4567"},
{"type": "mobile", "number": "987-6543"}
]
}
}
এখানে:
"status"হলো API এর স্টেটাস (যেমনsuccessবাerror),"data"একটি nested object যা ব্যবহারকারীর তথ্য ধারণ করছে,"address"একটি nested object এবং"phones"একটি array যা ফোন নম্বর ধারণ করছে।
API Response Handling in Java with JSON.simple
এখন আমরা JSON.simple ব্যবহার করে এই JSON API response পার্স (deserialize) করব এবং Java objects-এ রূপান্তর করব।
1. Java Classes তৈরি করা
প্রথমে আমাদের জন্য কিছু Java classes তৈরি করতে হবে যেখানে আমরা API response ডেটা রিসিভ করতে পারব।
User Class (Main Object)
import java.util.List;
public class User {
private int id;
private String name;
private int age;
private Address address;
private List<Phone> phones;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public List<Phone> getPhones() {
return phones;
}
public void setPhones(List<Phone> phones) {
this.phones = phones;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + ", phones=" + phones + "]";
}
}
Address Class (Nested Object)
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;
}
@Override
public String toString() {
return "Address [street=" + street + ", city=" + city + ", zipcode=" + zipcode + "]";
}
}
Phone Class (Array Elements)
public class Phone {
private String type;
private String number;
// Getters and Setters
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@Override
public String toString() {
return "Phone [type=" + type + ", number=" + number + "]";
}
}
2. JSON Response Parsing with JSON.simple
এখন, JSON.simple ব্যবহার করে API response পার্স (deserialize) করব এবং Java objects-এ রূপান্তর করব।
JSON Response Parsing Example:
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.util.ArrayList;
import java.util.List;
public class ApiResponseHandlingExample {
public static void main(String[] args) {
// JSON API Response
String apiResponse = "{"
+ "\"status\": \"success\","
+ "\"data\": {"
+ "\"id\": 1,"
+ "\"name\": \"John Doe\","
+ "\"age\": 30,"
+ "\"address\": {"
+ "\"street\": \"123 Main St\","
+ "\"city\": \"New York\","
+ "\"zipcode\": \"10001\""
+ "},"
+ "\"phones\": ["
+ "{\"type\": \"home\", \"number\": \"123-4567\"},"
+ "{\"type\": \"mobile\", \"number\": \"987-6543\"}"
+ "]"
+ "}"
+ "}";
JSONParser parser = new JSONParser();
try {
// Parse the JSON string into JSONObject
JSONObject jsonObject = (JSONObject) parser.parse(apiResponse);
// Extract the "data" object
JSONObject data = (JSONObject) jsonObject.get("data");
// Deserialize the User object
int id = ((Long) data.get("id")).intValue();
String name = (String) data.get("name");
int age = ((Long) data.get("age")).intValue();
// Deserialize the Address object (nested)
JSONObject addressJson = (JSONObject) data.get("address");
Address address = new Address();
address.setStreet((String) addressJson.get("street"));
address.setCity((String) addressJson.get("city"));
address.setZipcode((String) addressJson.get("zipcode"));
// Deserialize the phones array (JSON array)
JSONArray phonesJson = (JSONArray) data.get("phones");
List<Phone> phones = new ArrayList<>();
for (Object phoneObj : phonesJson) {
JSONObject phoneJson = (JSONObject) phoneObj;
Phone phone = new Phone();
phone.setType((String) phoneJson.get("type"));
phone.setNumber((String) phoneJson.get("number"));
phones.add(phone);
}
// Create the User object
User user = new User();
user.setId(id);
user.setName(name);
user.setAge(age);
user.setAddress(address);
user.setPhones(phones);
// Print the User object
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explanation of the Code:
- JSONParser ব্যবহার করে API response (JSON string) প্যার্স করা হয়েছে।
- data অংশের মধ্যে থাকা Address এবং phones অ্যারের ডেটা প্যার্স করা হয়েছে।
- Address অবজেক্ট তৈরি করা হয়েছে এবং phones অ্যারে থেকে ফোন নম্বর পার্স করা হয়েছে।
- User অবজেক্টে সব ডেটা সেট করা হয়েছে।
Output:
User [id=1, name=John Doe, age=30, address=Address [street=123 Main St, city=New York, zipcode=10001], phones=[Phone [type=home, number=123-4567], Phone [type=mobile, number=987-6543]]]
এখানে, User অবজেক্টে সমস্ত nested JSON অবজেক্ট (যেমন address) এবং array (যেমন phones) সঠিকভাবে পার্স করা হয়েছে।
3. JSON Response Serialization
এখন আমরা Java objects কে আবার JSON string-এ রূপান্তর (serialization) করব।
Java Objects to JSON Serialization Example:
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class ApiResponseSerialization {
public static void main(String[] args) {
// Create User object
User user = new User();
user.setId(1);
user.setName("John Doe");
user.setAge(30);
// Set Address
Address address = new Address();
address.setStreet("123 Main St");
address.setCity("New York");
address.setZipcode("10001");
user.setAddress(address);
// Set Phones
List<Phone> phones = new ArrayList<>();
Phone phone1 = new Phone();
phone1.setType("home");
phone1.setNumber("123-4567");
phones.add(phone1);
Phone phone2 = new Phone();
phone2.setType("mobile");
phone2.setNumber("987-6543");
phones.add(phone2);
user.setPhones(phones);
// Convert User object to JSON
JSONObject userJson = new JSONObject();
userJson.put("id", user.getId());
userJson.put("name", user.getName());
// Serialize Address
JSONObject addressJson = new JSONObject();
addressJson.put("street", user.getAddress().getStreet());
addressJson.put("city", user.getAddress().getCity());
addressJson.put("zipcode", user.getAddress().getZipcode());
userJson.put("address", addressJson);
// Serialize Phones
JSONArray phonesJson = new JSONArray();
for (Phone phone : user.getPhones()) {
JSONObject phoneJson = new JSONObject();
phoneJson.put("type", phone.getType());
phoneJson.put("number", phone.getNumber());
phonesJson.add(phoneJson);
}
userJson.put("phones", phonesJson);
//
Print the JSON string System.out.println(userJson.toJSONString()); } }
#### **Output:**
```json
{
"id": 1,
"name": "John Doe",
"address": {
"street": "123 Main St",
"city": "New York",
"zipcode": "10001"
},
"phones": [
{
"type": "home",
"number": "123-4567"
},
{
"type": "mobile",
"number": "987-6543"
}
]
}
এখানে, আমরা Java objects (যেমন User, Address, এবং Phone) কে JSON এ রূপান্তর করেছি।
- JSON.simple লাইব্রেরি ব্যবহার করে API response থেকে nested JSON অবজেক্ট এবং arrays সহজে পার্স করা যায়।
- Java POJO ক্লাস ব্যবহার করে ডেটা মডেলিং করা এবং JSON থেকে ডেটা এক্সট্র্যাক্ট করা খুব সহজ।
- Serialization এবং Deserialization এর মাধ্যমে JSON ডেটার সাথে Java objects এর কাজ করা কার্যকরী।
এই প্রক্রিয়া REST API ইন্টিগ্রেশনের সময় JSON ডেটার সঙ্গে কার্যকরীভাবে কাজ করতে সাহায্য করবে।
Read more