Nested JSON এবং Complex Structures হল JSON ডেটার গুরুত্বপূর্ণ বৈশিষ্ট্য, যেখানে JSON অবজেক্ট বা অ্যারে অন্য একটি অবজেক্ট বা অ্যারে ধারণ করে। এই ধরনের স্ট্রাকচার ওয়েব অ্যাপ্লিকেশন, API, এবং ডেটাবেসে ডেটার জটিলতা এবং সম্পর্ককে সঠিকভাবে প্রতিনিধিত্ব করতে ব্যবহৃত হয়। জাভা (Java) প্রোগ্রামিং ভাষার মাধ্যমে এই ধরনের nested JSON ডেটা প্রসেস করা সহজ, এবং এটি JSON পার্সিং বা সিরিয়ালাইজেশন করতে বিভিন্ন লাইব্রেরি যেমন Jackson বা Gson ব্যবহার করা হয়।
Nested JSON ডেটার মধ্যে একটি অবজেক্টের ভিতরে অন্য একটি অবজেক্ট বা অ্যারে থাকতে পারে। এর ফলে ডেটা কাঠামো অনেক বেশি জটিল হয়ে ওঠে, যা একটি সার্বিক সম্পর্ক বা ডেটার হায়ারারকিকাল (ধাপানুসারী) গঠন তৈরি করে।
উদাহরণস্বরূপ:
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"postalCode": "10001"
},
"phoneNumbers": [
{ "type": "home", "number": "123-456-7890" },
{ "type": "work", "number": "987-654-3210" }
]
}
এখানে, address
একটি nested JSON object এবং phoneNumbers
একটি JSON array যা আরও দুটি অবজেক্ট ধারণ করে।
Jackson এবং Gson লাইব্রেরি ব্যবহার করে Java-তে nested JSON এবং complex JSON structures প্রক্রিয়া করা যায়। নিচে এর উদাহরণ দেখানো হলো।
Jackson ব্যবহার করে nested JSON ডেটাকে Java অবজেক্টে কনভার্ট এবং সিরিয়ালাইজ করা যায়। প্রথমে Jackson লাইব্রেরি ইনস্টল করতে হবে।
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class NestedJsonExample {
public static void main(String[] args) throws IOException {
String json = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 30,\n" +
" \"address\": {\n" +
" \"street\": \"123 Main St\",\n" +
" \"city\": \"New York\",\n" +
" \"postalCode\": \"10001\"\n" +
" },\n" +
" \"phoneNumbers\": [\n" +
" { \"type\": \"home\", \"number\": \"123-456-7890\" },\n" +
" { \"type\": \"work\", \"number\": \"987-654-3210\" }\n" +
" ]\n" +
"}";
// Jackson ObjectMapper এর মাধ্যমে JSON থেকে Java অবজেক্টে কনভার্ট করা
ObjectMapper objectMapper = new ObjectMapper();
Person person = objectMapper.readValue(json, Person.class);
System.out.println(person.getName()); // John
System.out.println(person.getAddress().getCity()); // New York
System.out.println(person.getPhoneNumbers().get(0).getNumber()); // 123-456-7890
}
}
class Person {
private String name;
private int age;
private Address address;
private List<PhoneNumber> phoneNumbers;
// Getters and Setters
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<PhoneNumber> getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
}
class Address {
private String street;
private String city;
private String postalCode;
// 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 getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
}
class PhoneNumber {
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;
}
}
এখানে, ObjectMapper ব্যবহার করে JSON ডেটাকে Person, Address, এবং PhoneNumber ক্লাসের অবজেক্টে কনভার্ট করা হয়েছে।
John
New York
123-456-7890
Gson লাইব্রেরি ব্যবহার করে JSON ডেটাকে Java অবজেক্টে কনভার্ট করা যেতে পারে।
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
import com.google.gson.Gson;
import java.util.List;
public class NestedJsonExample {
public static void main(String[] args) {
String json = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 30,\n" +
" \"address\": {\n" +
" \"street\": \"123 Main St\",\n" +
" \"city\": \"New York\",\n" +
" \"postalCode\": \"10001\"\n" +
" },\n" +
" \"phoneNumbers\": [\n" +
" { \"type\": \"home\", \"number\": \"123-456-7890\" },\n" +
" { \"type\": \"work\", \"number\": \"987-654-3210\" }\n" +
" ]\n" +
"}";
// Gson এর মাধ্যমে JSON থেকে Java অবজেক্টে কনভার্ট করা
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
System.out.println(person.getName()); // John
System.out.println(person.getAddress().getCity()); // New York
System.out.println(person.getPhoneNumbers().get(0).getNumber()); // 123-456-7890
}
}
class Person {
private String name;
private int age;
private Address address;
private List<PhoneNumber> phoneNumbers;
// Getters and Setters
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<PhoneNumber> getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
}
class Address {
private String street;
private String city;
private String postalCode;
// 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 getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
}
class PhoneNumber {
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;
}
}
এখানে, Gson ব্যবহার করে Person, Address, এবং PhoneNumber অবজেক্টে JSON ডেটা কনভার্ট করা হয়েছে।
John
New York
123-456-7890
Nested JSON এবং Complex Structures Java এবং অন্যান্য ভাষায় ডেটা প্রসেসিংকে আরও নমনীয় এবং কার্যকরী করে তোলে, যা আধুনিক ওয়েব এবং মাইক্রোসার্ভিস অ্যাপ্লিকেশনগুলিতে অত্যন্ত কার্যকর।
JSON (JavaScript Object Notation) একটি হালকা, মানব-পঠনযোগ্য এবং মেশিন-পঠনযোগ্য ডেটা বিনিময় ফরম্যাট। JSON ডেটাতে সাধারণত key-value pair ব্যবহৃত হয়, যা ডেটাকে বিভিন্ন ডাটা টাইপ (যেমন: স্ট্রিং, নাম্বার, অ্যারে, অবজেক্ট) ধারণ করতে সক্ষম করে। Nested JSON হল JSON এর একটি কাঠামো যেখানে একটি JSON অবজেক্ট অন্য একটি অবজেক্টের মধ্যে থাকে, অর্থাৎ একটি অবজেক্টের মধ্যে আরেকটি অবজেক্ট বা অ্যারে থাকতে পারে।
Nested JSON এমন একটি JSON অবজেক্ট যেখানে অন্তর্নিহিত (nested) JSON অবজেক্ট বা অ্যারে থাকে। এটি জটিল ডেটা কাঠামো তৈরি করতে ব্যবহৃত হয়। এটি সাধারণত ব্যবহার করা হয় যখন ডেটার মধ্যে সম্পর্কযুক্ত বা সাপেক্ষ তথ্য থাকতে থাকে। উদাহরণস্বরূপ, একটি ব্যবহারকারীর তথ্যের মধ্যে তার ঠিকানা, যোগাযোগের তথ্য, অথবা পূর্ববর্তী কার্যক্রম থাকতে পারে।
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"zipcode": "10001"
},
"phoneNumbers": [
{
"type": "mobile",
"number": "123-456-7890"
},
{
"type": "home",
"number": "987-654-3210"
}
]
}
এখানে, address এবং phoneNumbers দুটি nested অবজেক্ট এবং অ্যারে। address একটি অবজেক্ট, যা street, city, এবং zipcode এর মতো কী-ভ্যালু পেয়ার ধারণ করে। phoneNumbers একটি অ্যারে, যেখানে দুটি অবজেক্ট রয়েছে, প্রতিটি ফোন নম্বরের জন্য একটি type এবং number প্রদান করা হয়েছে।
Nested JSON এমন পরিস্থিতিতে ব্যবহার করা হয় যখন একটি ডেটা কাঠামো অন্যান্য সম্পর্কিত তথ্য ধারণ করে, যেমন:
Java তে Nested JSON প্রক্রিয়াজাত করতে Jackson, Gson বা অন্যান্য লাইব্রেরি ব্যবহার করা যায়। নিচে Jackson লাইব্রেরি দিয়ে Nested JSON কিভাবে পার্স করতে হয় তার একটি উদাহরণ দেয়া হলো।
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
class Address {
private String street;
private String city;
private String zipcode;
// Getter and Setter methods
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; }
}
class PhoneNumber {
private String type;
private String number;
// Getter and Setter methods
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; }
}
class Person {
private String name;
private int age;
private Address address;
private List<PhoneNumber> phoneNumbers;
// 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 Address getAddress() { return address; }
public void setAddress(Address address) { this.address = address; }
public List<PhoneNumber> getPhoneNumbers() { return phoneNumbers; }
public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) { this.phoneNumbers = phoneNumbers; }
}
public class NestedJSONExample {
public static void main(String[] args) {
try {
// JSON String with Nested Objects
String json = "{"
+ "\"name\": \"John\","
+ "\"age\": 30,"
+ "\"address\": {\"street\": \"123 Main St\", \"city\": \"New York\", \"zipcode\": \"10001\"},"
+ "\"phoneNumbers\": ["
+ "{\"type\": \"mobile\", \"number\": \"123-456-7890\"},"
+ "{\"type\": \"home\", \"number\": \"987-654-3210\"}"
+ "]"
+ "}";
// Jackson ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
// JSON to Java object conversion
Person person = objectMapper.readValue(json, Person.class);
// Output the nested values
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
System.out.println("Street: " + person.getAddress().getStreet());
System.out.println("City: " + person.getAddress().getCity());
System.out.println("Phone Numbers: ");
for (PhoneNumber phone : person.getPhoneNumbers()) {
System.out.println(phone.getType() + ": " + phone.getNumber());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে, Person ক্লাসে Address এবং PhoneNumber নামে দুটি নেস্টেড অবজেক্ট রয়েছে। Jackson ObjectMapper ব্যবহার করে Nested JSON পার্স করা হয়েছে এবং ডেটাকে C# অবজেক্টে রূপান্তর করা হয়েছে।
Nested JSON একটি শক্তিশালী এবং বহুল ব্যবহৃত কৌশল যা ডেটাকে আরও সংগঠিত এবং সম্পর্কযুক্ত ভাবে স্টোর করার জন্য ব্যবহৃত হয়। JSON এর সহজ গঠন এবং C# বা Java তে এর সহজ প্রক্রিয়াজাতকরণের কারণে এটি খুবই জনপ্রিয়।
জেএসপি (JSP) বা Java অ্যাপ্লিকেশনে Complex JSON Structures যেমন অ্যারে এবং অবজেক্টের মধ্যে নেস্টেড (nested) ডেটা পার্স করা এবং প্রক্রিয়াজাত করা খুবই গুরুত্বপূর্ণ। JSON ডেটা সাধারণত সহজ স্ট্রিং এবং নাম্বারের থেকে বেশি জটিল হতে পারে, যেখানে অবজেক্ট এবং অ্যারের কম্বিনেশন থাকে।
এই প্রক্রিয়াটি করার জন্য সাধারণত Jackson বা Gson লাইব্রেরি ব্যবহার করা হয়। আমরা এখানে Jackson ব্যবহার করে Complex JSON Structures পার্স করার এবং প্রক্রিয়াজাত করার উদাহরণ দেখাব।
ধরা যাক, আমাদের কাছে একটি JSON ডেটা আছে যা অ্যারে, অবজেক্ট এবং নাম্বারসহ বিভিন্ন ধরনের ডেটা ধারণ করে।
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"zip": "10001"
},
"phoneNumbers": [
{
"type": "mobile",
"number": "123-456-7890"
},
{
"type": "home",
"number": "987-654-3210"
}
]
}
এই JSON ডেটাতে একটি অবজেক্ট address, এবং একটি অ্যারে phoneNumbers রয়েছে, যা আরও দুটি অবজেক্ট ধারণ করে।
প্রথমে আপনার Maven প্রকল্পে Jackson লাইব্রেরি যোগ করুন:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
এখন আমরা JSON ডেটাকে Java অবজেক্টে কনভার্ট করার জন্য Java ক্লাস তৈরি করব।
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
class Address {
private String street;
private String city;
private String zip;
// 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 getZip() { return zip; }
public void setZip(String zip) { this.zip = zip; }
}
class PhoneNumber {
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; }
}
class Person {
private String name;
private int age;
private Address address;
@JsonProperty("phoneNumbers") // To handle the JSON array field
private List<PhoneNumber> phoneNumbers;
// Getters and Setters
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<PhoneNumber> getPhoneNumbers() { return phoneNumbers; }
public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) { this.phoneNumbers = phoneNumbers; }
}
এখানে:
Address
ক্লাসের মধ্যে street, city, এবং zip আছে, যা JSON অবজেক্ট address
এর মান প্রতিনিধিত্ব করে।PhoneNumber
ক্লাসটি JSON অ্যারের প্রতিটি অবজেক্টের জন্য তৈরি করা হয়েছে (যেখানে type
এবং number
ফিল্ড আছে)।phoneNumbers
হল একটি List।এখন আমরা JSON ডেটা Java অবজেক্টে কনভার্ট (পার্স) করব।
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JacksonComplexJsonExample {
public static void main(String[] args) throws IOException {
String jsonString = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 30,\n" +
" \"address\": {\n" +
" \"street\": \"123 Main St\",\n" +
" \"city\": \"New York\",\n" +
" \"zip\": \"10001\"\n" +
" },\n" +
" \"phoneNumbers\": [\n" +
" {\n" +
" \"type\": \"mobile\",\n" +
" \"number\": \"123-456-7890\"\n" +
" },\n" +
" {\n" +
" \"type\": \"home\",\n" +
" \"number\": \"987-654-3210\"\n" +
" }\n" +
" ]\n" +
"}";
ObjectMapper objectMapper = new ObjectMapper();
// JSON to Java object
Person person = objectMapper.readValue(jsonString, Person.class);
// Printing parsed data
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
System.out.println("Street: " + person.getAddress().getStreet());
System.out.println("Phone Numbers:");
for (PhoneNumber phoneNumber : person.getPhoneNumbers()) {
System.out.println(" Type: " + phoneNumber.getType() + ", Number: " + phoneNumber.getNumber());
}
}
}
এখানে:
ObjectMapper
এর মাধ্যমে JSON স্ট্রিংটিকে Person
অবজেক্টে রূপান্তর করা হচ্ছে।person.getName()
, person.getAge()
, person.getAddress().getStreet()
, এবং person.getPhoneNumbers()
ব্যবহার করে পার্স করা ডেটা অ্যাক্সেস করা হচ্ছে।আউটপুট:
Name: John
Age: 30
Street: 123 Main St
Phone Numbers:
Type: mobile, Number: 123-456-7890
Type: home, Number: 987-654-3210
পার্স করার পর, আপনি JSON ডেটার যেকোনো অংশে প্রক্রিয়াকরণ করতে পারেন, যেমন:
উদাহরণস্বরূপ, আপনি যদি ফোন নাম্বার পরিবর্তন করতে চান, তাহলে আপনি person.getPhoneNumbers()
এর মাধ্যমে ফোন নম্বর পরিবর্তন করতে পারেন।
Complex JSON Structures পার্স এবং প্রক্রিয়াজাত করার জন্য Jackson একটি শক্তিশালী এবং জনপ্রিয় লাইব্রেরি। এখানে, JSON ডেটার মধ্যে অবজেক্ট এবং অ্যারে থাকলে, Jackson এর মাধ্যমে সহজেই পার্স এবং প্রক্রিয়াজাত করা সম্ভব। JSON ডেটা পার্স করার জন্য Java ক্লাস তৈরি করতে হয় এবং তারপর ObjectMapper
ব্যবহার করে JSON কে Java অবজেক্টে রূপান্তর করতে হয়। JSON ডেটা প্রক্রিয়াজাত করা Java কোডের মাধ্যমে বিভিন্ন কার্যক্রম করা যায়, যেমন ডেটা পরিবর্তন বা নতুন তথ্য যুক্ত করা।
Nested JSON ডেটা কাঠামো একাধিক লেভেলে ডেটা ধারণ করে, যেখানে একটি JSON অবজেক্টের মধ্যে আরেকটি JSON অবজেক্ট থাকতে পারে। JSON এর এই ধরনের কাঠামোকে প্রক্রিয়াকরণ করার জন্য recursive techniques ব্যবহার করা যেতে পারে। Recursive techniques হল এমন একটি পদ্ধতি যেখানে একটি ফাংশন নিজেই নিজেকে কল করে, যা ডেটা কাঠামোর প্রতি স্তরের জন্য কার্যকরী হতে পারে।
Java তে Nested JSON Handle করতে Jackson বা Gson লাইব্রেরি ব্যবহার করা হয়। এই ধরনের ডেটা পার্স বা সিরিয়ালাইজ করার সময় recursive techniques ব্যবহার করলে, আমরা সহজে এবং দক্ষতার সাথে নেস্টেড ডেটা অ্যাক্সেস করতে পারি।
ধরা যাক, আমাদের একটি JSON ডেটা আছে যা Nested অবজেক্ট এবং অ্যারে ধারণ করে। এখানে একটি উদাহরণ দেখানো হচ্ছে:
{
"name": "John Doe",
"address": {
"street": "123 Main St",
"city": "New York",
"zipcode": {
"code": "10001",
"area": "Downtown"
}
},
"phoneNumbers": [
{"type": "home", "number": "123-456-7890"},
{"type": "work", "number": "987-654-3210"}
]
}
এই JSON এর মধ্যে address
একটি nested অবজেক্ট, এবং phoneNumbers
একটি অ্যারে যা nested অবজেক্ট ধারণ করে। আমরা যদি এই ডেটা C# বা Java তে handle করতে চাই, তাহলে recursive techniques ব্যবহার করতে হবে, বিশেষ করে nested অবজেক্টগুলোকে প্রক্রিয়া করার জন্য।
Jackson লাইব্রেরি Java তে JSON ডেটা প্রসেস করার জন্য একটি জনপ্রিয় টুল। Jackson ব্যবহার করে আমরা JSON স্ট্রিংকে Java Object-এ রূপান্তর (Deserialization) এবং Java Object-কে JSON স্ট্রিং-এ রূপান্তর (Serialization) করতে পারি।
ধরা যাক, আমরা উল্লিখিত JSON ডেটাকে Java Object-এ রূপান্তর করতে চাই এবং recursive পদ্ধতিতে নেস্টেড অবজেক্ট এবং অ্যারে অ্যাক্সেস করতে চাই।
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
public class Person {
private String name;
private Address address;
private List<PhoneNumber> phoneNumbers;
// Getter and Setter methods
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<PhoneNumber> getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
public static class Address {
private String street;
private String city;
private Zipcode zipcode;
// Getter and Setter methods
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 Zipcode getZipcode() {
return zipcode;
}
public void setZipcode(Zipcode zipcode) {
this.zipcode = zipcode;
}
}
public static class Zipcode {
private String code;
private String area;
// Getter and Setter methods
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
}
public static class PhoneNumber {
private String type;
private String number;
// Getter and Setter methods
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;
}
}
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\": \"John Doe\", \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\", \"zipcode\": {\"code\": \"10001\", \"area\": \"Downtown\"}}, \"phoneNumbers\": [{\"type\": \"home\", \"number\": \"123-456-7890\"}, {\"type\": \"work\", \"number\": \"987-654-3210\"}]}";
// Jackson ObjectMapper ব্যবহার করে JSON থেকে Java Object এ রূপান্তর
ObjectMapper objectMapper = new ObjectMapper();
Person person = objectMapper.readValue(jsonString, Person.class);
// Output nested values
System.out.println("Name: " + person.getName());
System.out.println("Street: " + person.getAddress().getStreet());
System.out.println("City: " + person.getAddress().getCity());
System.out.println("Zip Code: " + person.getAddress().getZipcode().getCode());
System.out.println("Area: " + person.getAddress().getZipcode().getArea());
for (PhoneNumber phone : person.getPhoneNumbers()) {
System.out.println(phone.getType() + " Phone: " + phone.getNumber());
}
}
}
Person
ক্লাসের মধ্যে address
এবং phoneNumbers
ফিল্ড গুলো nested JSON অবজেক্ট এবং অ্যারের জন্য ব্যবহৃত হয়েছে।Address
এবং Zipcode
ক্লাসে nested অবজেক্টগুলোর জন্য getter এবং setter মেথড রাখা হয়েছে।ObjectMapper
ব্যবহার করে JSON স্ট্রিং থেকে Person
অবজেক্টে রূপান্তর করা হয়েছে।Name: John Doe
Street: 123 Main St
City: New York
Zip Code: 10001
Area: Downtown
home Phone: 123-456-7890
work Phone: 987-654-3210
যদি JSON ডেটার কাঠামো ডায়নামিক হয় এবং জানা না থাকে যে কত লেভেল পর্যন্ত nested অবজেক্ট থাকতে পারে, তখন recursive techniques ব্যবহার করা দরকার। এখানে একটি উদাহরণ দেওয়া হলো যেখানে JSON অবজেক্টকে রিকার্সিভভাবে প্রক্রিয়া করা হয়েছে।
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class RecursiveJsonExample {
public static void main(String[] args) throws IOException {
String jsonString = "{\"name\": \"John Doe\", \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\", \"zipcode\": {\"code\": \"10001\", \"area\": \"Downtown\"}}, \"phoneNumbers\": [{\"type\": \"home\", \"number\": \"123-456-7890\"}, {\"type\": \"work\", \"number\": \"987-654-3210\"}]}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonString);
// Recursive method to print all keys and values
printJsonNode(rootNode);
}
public static void printJsonNode(JsonNode node) {
if (node.isObject()) {
node.fieldNames().forEachRemaining(fieldName -> {
JsonNode childNode = node.get(fieldName);
System.out.println(fieldName + ": " + childNode.asText());
// Recursively handle nested objects
if (childNode.isObject() || childNode.isArray()) {
printJsonNode(childNode);
}
});
} else if (node.isArray()) {
for (JsonNode arrayElement : node) {
printJsonNode(arrayElement);
}
}
}
}
JsonNode
ব্যবহার করা হয়েছে যাতে ডাইনামিকভাবে JSON স্ট্রাকচার হ্যান্ডেল করা যায়।printJsonNode
মেথডটি রিকার্সিভ পদ্ধতিতে JSON অবজেক্ট এবং অ্যারে গুলি প্রক্রিয়া করছে।Recursive techniques ব্যবহার করে nested JSON ডেটা হ্যান্ডলিং Java তে খুবই কার্যকরী। Jackson লাইব্রেরি ব্যবহার করে সহজে nested JSON অবজেক্ট এবং অ্যারে গুলি প্রক্রিয়া করা যায়। এই ধরনের ডেটাকে সঠিকভাবে অ্যাক্সেস করতে রিকার্সিভ পদ্ধতি খুবই উপকারী, বিশেষ করে যখন JSON স্ট্রাকচার ডায়নামিক বা জটিল হয়।
নেস্টেড JSON ডেটা (Nested JSON Data) এমন একটি JSON অবজেক্ট যা অন্যান্য JSON অবজেক্ট বা অ্যারের মধ্যে অন্তর্ভুক্ত থাকে। এই ধরনের ডেটা পার্স করার জন্য আপনাকে JSON এর মধ্যে বিভিন্ন স্তরের ডেটা অ্যাক্সেস করতে হবে। Java-তে Nested JSON Data পার্স করার জন্য সাধারণত JSONObject
এবং JSONArray
ক্লাস ব্যবহৃত হয়।
এখানে একটি নেস্টেড JSON ডেটা এবং সেটি Java ব্যবহার করে পার্স করার প্রক্রিয়া দেখানো হবে।
ধরা যাক আমাদের কাছে একটি নেস্টেড JSON ডেটা রয়েছে যা একজন ছাত্রের তথ্য এবং তার বিষয়ের তালিকা ধারণ করে।
{
"student": {
"name": "John Doe",
"age": 21,
"courses": [
{
"course_name": "Mathematics",
"credits": 4
},
{
"course_name": "Computer Science",
"credits": 3
}
]
}
}
এই JSON ডেটায়:
student
একটি অবজেক্ট, যার মধ্যে name
, age
এবং courses
নামে একটি অ্যারে রয়েছে।courses
অ্যারে তে দুটি অবজেক্ট রয়েছে, প্রতিটি অবজেক্টে course_name
এবং credits
রয়েছে।এখন, Java-তে JSON পার্স করতে আমরা org.json
লাইব্রেরি ব্যবহার করবো। এই লাইব্রেরি ব্যবহার করে আমরা JSON ডেটা পার্স এবং অ্যাক্সেস করতে পারি।
আপনার প্রজেক্টে json.jar
লাইব্রেরি অন্তর্ভুক্ত করতে হবে। আপনি Maven ব্যবহার করলে নিচের ডিপেনডেন্সি যোগ করতে পারেন:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
import org.json.JSONArray;
import org.json.JSONObject;
public class NestedJsonParsing {
public static void main(String[] args) {
// Nested JSON String
String jsonData = "{"
+ "\"student\": {"
+ "\"name\": \"John Doe\","
+ "\"age\": 21,"
+ "\"courses\": ["
+ "{\"course_name\": \"Mathematics\", \"credits\": 4},"
+ "{\"course_name\": \"Computer Science\", \"credits\": 3}"
+ "]"
+ "}"
+ "}";
// JSON String থেকে JSONObject তৈরি করা
JSONObject jsonObject = new JSONObject(jsonData);
// student অবজেক্ট অ্যাক্সেস করা
JSONObject student = jsonObject.getJSONObject("student");
// student এর name এবং age অ্যাক্সেস করা
String name = student.getString("name");
int age = student.getInt("age");
System.out.println("Student Name: " + name);
System.out.println("Student Age: " + age);
// courses অ্যারে অ্যাক্সেস করা
JSONArray courses = student.getJSONArray("courses");
// courses অ্যারে থেকে প্রতিটি course অ্যাক্সেস করা
for (int i = 0; i < courses.length(); i++) {
JSONObject course = courses.getJSONObject(i);
String courseName = course.getString("course_name");
int credits = course.getInt("credits");
System.out.println("Course " + (i + 1) + ": " + courseName + ", Credits: " + credits);
}
}
}
JSONObject jsonObject = new JSONObject(jsonData);
: JSON স্ট্রিং থেকে একটি JSONObject
তৈরি করা হচ্ছে।getJSONObject("student")
: "student" নামক মূল অবজেক্টটি অ্যাক্সেস করা হচ্ছে।getString("name")
এবং getInt("age")
: student
অবজেক্টের name
এবং age
ভ্যালু আনা হচ্ছে।JSONArray courses = student.getJSONArray("courses");
: courses
নামক অ্যারে অ্যাক্সেস করা হচ্ছে।courses.getJSONObject(i)
: courses
অ্যারের প্রতিটি অবজেক্ট থেকে course_name
এবং credits
ভ্যালু সংগ্রহ করা হচ্ছে।Student Name: John Doe
Student Age: 21
Course 1: Mathematics, Credits: 4
Course 2: Computer Science, Credits: 3
এটি একটি সাধারণ উদাহরণ ছিল যেখানে একটি নেস্টেড JSON ডেটা থেকে Java ব্যবহার করে ডেটা পার্স করা হয়েছে। আমরা JSONObject
এবং JSONArray
ব্যবহার করে নেস্টেড JSON অবজেক্ট এবং অ্যারে থেকে তথ্য অ্যাক্সেস করেছি।
JSONObject
: JSON অবজেক্টের মান অ্যাক্সেস করতে ব্যবহৃত হয়।JSONArray
: JSON অ্যারে থেকে ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়।এই ধরনের JSON পার্সিং আপনাকে যেকোনো নেস্টেড JSON স্ট্রাকচার থেকে তথ্য নিষ্কাশন করতে সাহায্য করবে, যা বেশিরভাগ আধুনিক ওয়েব সার্ভিসে ব্যবহৃত হয়।
Read more