JSON.simple লাইব্রেরি ব্যবহার করে complex nested JSON ডেটা পার্সিং এবং এনকোডিং করা খুবই সহজ। JSON.simple-এ, আপনি nested JSON objects বা JSON arrays কে Java objects-এ রূপান্তর করতে পারেন এবং JSON অবজেক্ট তৈরি বা লিখতেও পারেন।
এখানে আমরা complex nested JSON পার্সিং এবং এনকোডিং এর প্রক্রিয়া দেখাবো।
Complex Nested JSON Structure Example
ধরা যাক, আমাদের একটি JSON ডেটা স্ট্রিং রয়েছে যা nested objects এবং arrays ধারণ করে। আমরা সেই JSON ডেটাকে Java objects এ রূপান্তর (deserialization) করব এবং আবার JSON স্ট্রিংয়ে রূপান্তর (serialization) করব।
Example: Complex Nested 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"}
]
}
এখানে, address একটি nested object এবং phones একটি JSON array যার মধ্যে আরো অবজেক্ট রয়েছে।
Step 1: Java Classes তৈরি করা
JSON ডেটার সাথে মিলে এমন Java ক্লাস তৈরি করা দরকার যাতে আমরা ডেটা পার্স করতে পারি।
Person Class (Main Object)
import java.util.List;
public class Person {
private int id;
private String name;
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 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 "Person [id=" + id + ", name=" + name + ", 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 + "]";
}
}
Step 2: JSON Parsing with JSON.simple
এখন আমরা JSON.simple লাইব্রেরি ব্যবহার করে complex nested JSON ডেটা পার্স (deserialize) করব এবং সঠিকভাবে Java objects এ রূপান্তর করব।
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.util.ArrayList;
import java.util.List;
public class JsonDeserializationExample {
public static void main(String[] args) {
String jsonString = "{\"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\"}]}";
JSONParser parser = new JSONParser();
try {
// Parse the JSON string into JSONObject
JSONObject jsonObject = (JSONObject) parser.parse(jsonString);
// Deserialize JSON data into Java objects
int id = ((Long) jsonObject.get("id")).intValue();
String name = (String) jsonObject.get("name");
// Deserialize address (nested object)
JSONObject addressJson = (JSONObject) jsonObject.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 phones (array)
JSONArray phonesJson = (JSONArray) jsonObject.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 Person object from JSON data
Person person = new Person();
person.setId(id);
person.setName(name);
person.setAddress(address);
person.setPhones(phones);
// Print the deserialized object
System.out.println(person);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Explanation of the code:
- JSONParser: JSON ডেটা পার্স করতে JSONParser ক্লাস ব্যবহার করা হয়েছে।
- JSONObject: JSON স্ট্রিং থেকে JSON অবজেক্টে রূপান্তর করা হয়েছে।
- Address (Nested Object): JSON অবজেক্টের মধ্যে থাকা address অবজেক্টটি পার্স করে Address ক্লাসের অবজেক্টে রূপান্তরিত করা হয়েছে।
- JSONArray: JSON অ্যারে phones থেকে প্রতিটি ফোন অবজেক্ট বের করে Phone ক্লাসের অবজেক্টে রূপান্তরিত করা হয়েছে এবং সেগুলো List তে রাখা হয়েছে।
- Person Object: সব তথ্য সংগ্রহ করে একটি Person অবজেক্ট তৈরি করা হয়েছে।
Output:
Person [id=1, name=John Doe, address=Address [street=123 Main St, city=New York, zipcode=10001], phones=[Phone [type=home, number=123-4567], Phone [type=mobile, number=987-6543]]]
এখানে, আমরা nested JSON (যেমন, address এবং phones অ্যারে) থেকে ডেটা পার্স করে Java objects-এ রূপান্তর করেছি এবং Person অবজেক্টের মধ্যে সেগুলো সংরক্ষণ করেছি।
Step 3: JSON Encoding (Serialization)
এখন, আমরা JSON.simple ব্যবহার করে Java objects কে আবার JSON String-এ রূপান্তর (serialize) করব।
Java Objects কে JSON String এ রূপান্তর করা:
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class JsonSerializationExample {
public static void main(String[] args) {
// Create a Person object
Person person = new Person();
person.setId(1);
person.setName("John Doe");
// Set address for the person
Address address = new Address();
address.setStreet("123 Main St");
address.setCity("New York");
address.setZipcode("10001");
person.setAddress(address);
// Set phones for the person
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);
person.setPhones(phones);
// Serialize Java objects to JSON
JSONObject personJson = new JSONObject();
personJson.put("id", person.getId());
personJson.put("name", person.getName());
// Serialize address
JSONObject addressJson = new JSONObject();
addressJson.put("street", person.getAddress().getStreet());
addressJson.put("city", person.getAddress().getCity());
addressJson.put("zipcode", person.getAddress().getZipcode());
personJson.put("address", addressJson);
// Serialize phones
JSONArray phonesJson = new JSONArray();
for (Phone phone : person.getPhones()) {
JSONObject phoneJson = new JSONObject();
phoneJson.put("type", phone.getType());
phoneJson.put("number", phone.getNumber());
phonesJson.add(phoneJson);
}
personJson.put("phones", phonesJson);
// Output the JSON string
System.out.println(personJson.toJSONString());
}
}
Output:
{
"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 (Person, Address, Phone) থেকে একটি JSON String তৈরি করেছি।
- Complex JSON ডেটার Deserialization এবং Serialization
সহজেই JSON.simple লাইব্রেরি দিয়ে করা যায়। 2. Nested JSON objects এবং JSONArray ব্যবহার করে আরও জটিল কাঠামো তৈরি করা সম্ভব। 3. Java objects কে JSON-এ রূপান্তর এবং JSON থেকে Java objects-এ রূপান্তর করার প্রক্রিয়া সহজ এবং কার্যকরী। 4. JSON.simple লাইব্রেরি Java ডেভেলপারদের জন্য একটি খুবই কার্যকরী টুল JSON ডেটা ম্যানিপুলেশন এবং পার্সিংয়ের জন্য।
Read more