Gson লাইব্রেরি JSON Tree Model ব্যবহার করে JSON ডেটাকে একটি পব্জি (tree-like) স্ট্রাকচারে রূপান্তর করতে সহায়ক। এটি JSON ডেটার গঠন (structure) এবং ডেটার প্রতিটি অংশে অ্যাক্সেস পাওয়ার জন্য খুবই উপকারী, বিশেষ করে যখন JSON ডেটা খুবই জটিল বা Nested (অনেক স্তরের) হয়। Gson-এ JsonObject, JsonArray, JsonElement ইত্যাদি ক্লাসের মাধ্যমে JSON ডেটাকে একটি গাছের মতো (tree structure) মডেলে পরিণত করা হয়।
Gson JSON Tree Model ব্যবহার
Gson-এর Tree Model মূলত তিনটি মৌলিক শ্রেণীর উপর ভিত্তি করে কাজ করে:
- JsonElement: Gson-এর সমস্ত JSON অবজেক্টের বেস ক্লাস, যা JSON ডেটার সকল ধরনের উপাদান ধারণ করতে পারে।
- JsonObject: JSON অবজেক্টের জন্য ব্যবহার করা হয়, যা কী-মান জোড়া ধারণ করে।
- JsonArray: JSON অ্যারের জন্য ব্যবহার করা হয়, যা একাধিক মান ধারণ করে।
- JsonPrimitive: JSON ডেটার মৌলিক ধরণের (যেমন string, number, boolean) প্রতিনিধিত্ব করে।
এগুলো ব্যবহার করে আমরা JSON ডেটাকে গাছের মতো গঠন করতে পারি এবং ডেটার বিভিন্ন অংশে অ্যাক্সেস পেতে পারি।
1. Gson দিয়ে JSON Tree Model ব্যবহার করা
উদাহরণ: JSON Tree Model Example
ধরা যাক, একটি JSON স্ট্রিং আমাদের কাছে রয়েছে:
{
"name": "John",
"age": 30,
"address": {
"city": "New York",
"zipcode": "10001"
},
"phoneNumbers": [
{
"type": "home",
"number": "123-456-7890"
},
{
"type": "mobile",
"number": "987-654-3210"
}
]
}
আমরা এই JSON ডেটার ভিতরে name, age, address, এবং phoneNumbers এর মান বের করার জন্য Gson-এর JSON Tree Model ব্যবহার করতে পারি।
কোড:
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
// JSON স্ট্রিং
String json = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 30,\n" +
" \"address\": {\n" +
" \"city\": \"New York\",\n" +
" \"zipcode\": \"10001\"\n" +
" },\n" +
" \"phoneNumbers\": [\n" +
" {\n" +
" \"type\": \"home\",\n" +
" \"number\": \"123-456-7890\"\n" +
" },\n" +
" {\n" +
" \"type\": \"mobile\",\n" +
" \"number\": \"987-654-3210\"\n" +
" }\n" +
" ]\n" +
"}";
// Gson object তৈরি
Gson gson = new Gson();
// JSON থেকে JsonElement এ কনভার্ট করা
JsonElement element = JsonParser.parseString(json);
// JSON ডেটার মান অ্যাক্সেস করা
JsonObject jsonObject = element.getAsJsonObject();
// "name" এর মান পেতে
String name = jsonObject.get("name").getAsString();
System.out.println("Name: " + name);
// "age" এর মান পেতে
int age = jsonObject.get("age").getAsInt();
System.out.println("Age: " + age);
// "address" অবজেক্টের "city" মান পেতে
JsonObject address = jsonObject.getAsJsonObject("address");
String city = address.get("city").getAsString();
System.out.println("City: " + city);
// "phoneNumbers" অ্যারের প্রথম উপাদানের "number" মান পেতে
JsonArray phoneNumbers = jsonObject.getAsJsonArray("phoneNumbers");
JsonObject firstPhone = phoneNumbers.get(0).getAsJsonObject();
String firstPhoneNumber = firstPhone.get("number").getAsString();
System.out.println("First Phone Number: " + firstPhoneNumber);
}
}
আউটপুট:
Name: John
Age: 30
City: New York
First Phone Number: 123-456-7890
ব্যাখ্যা:
JsonParser.parseString(json)ব্যবহার করে আমরা JSON স্ট্রিংটিকেJsonElementএ রূপান্তর করেছি, যা JSON ডেটার একমাত্র উপাদান (primitive value, object, array) ধারণ করতে পারে।- তারপর
getAsJsonObject()এবংgetAsJsonArray()এর মাধ্যমে আমরা JSON অবজেক্ট এবং অ্যারের মানে অ্যাক্সেস করেছি। getAsString(),getAsInt()ব্যবহার করে আমরাString,Integerপ্রকারের মানগুলি পেয়েছি।
2. JSON Tree Model Manipulation (JSON পরিবর্তন করা)
JSON Tree Model ব্যবহার করে আমরা JSON ডেটাকে ম্যানিপুলেটও করতে পারি, যেমন নতুন কী বা মান যুক্ত করা, মুছে ফেলা, বা পরিবর্তন করা।
উদাহরণ: JSON Tree Model দিয়ে JSON পরিবর্তন
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
// JSON স্ট্রিং
String json = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 30\n" +
"}";
// Gson object তৈরি
Gson gson = new Gson();
// JSON থেকে JsonElement এ কনভার্ট করা
JsonElement element = JsonParser.parseString(json);
// JsonObject তৈরি করা
JsonObject jsonObject = element.getAsJsonObject();
// "name" পরিবর্তন করা
jsonObject.addProperty("name", "Jane");
// নতুন property যোগ করা
jsonObject.addProperty("city", "New York");
// "age" প্রপার্টি মুছে ফেলা
jsonObject.remove("age");
// নতুন JSON দেখতে
String modifiedJson = gson.toJson(jsonObject);
System.out.println("Modified JSON: " + modifiedJson);
}
}
আউটপুট:
Modified JSON: {"name":"Jane","city":"New York"}
ব্যাখ্যা:
addProperty()ব্যবহার করে আমরা নতুন কী-মান জোড়া যুক্ত করেছি।remove()ব্যবহার করে একটি কী (এখানে"age") মুছে ফেলেছি।- পরিবর্তিত JSON
toJson()ব্যবহার করে আবার JSON স্ট্রিং এ রূপান্তর করেছি।
3. Advanced Example: Nested JSON Tree Model with Arrays
ধরা যাক, আপনার কাছে একটি JSON ডেটা রয়েছে যা আরও জটিল (নেস্টেড) এবং এতে অ্যারে রয়েছে। Gson দিয়ে এটি খুব সহজেই হ্যান্ডেল করা যায়।
উদাহরণ: Nested JSON Tree Model with Arrays
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
// Nested JSON স্ট্রিং
String json = "{\n" +
" \"name\": \"John\",\n" +
" \"children\": [\n" +
" { \"name\": \"Alice\", \"age\": 5 },\n" +
" { \"name\": \"Bob\", \"age\": 3 }\n" +
" ]\n" +
"}";
// Gson object তৈরি
Gson gson = new Gson();
// JSON থেকে JsonElement এ কনভার্ট করা
JsonElement element = JsonParser.parseString(json);
// JsonObject তৈরি করা
JsonObject jsonObject = element.getAsJsonObject();
// "children" অ্যারের প্রতিটি উপাদানের নাম এবং বয়স বের করা
JsonArray children = jsonObject.getAsJsonArray("children");
for (JsonElement childElement : children) {
JsonObject child = childElement.getAsJsonObject();
String childName = child.get("name").getAsString();
int childAge = child.get("age").getAsInt();
System.out.println(childName + " is " + childAge + " years old.");
}
}
}
আউটপুট:
Alice is 5 years old.
Bob is 3 years old.
ব্যাখ্যা:
- এখানে
"children"অ্যারের প্রতিটি উপাদানকে লুপের মাধ্যমে অ্যাক্সেস করে আমরা তাদেরnameএবংageপ্রপার্টি বের করেছি। JsonArrayএবংJsonObjectব্যবহার করে অ্যারে এবং অবজেক্টের ভিতরের ডেটাতে প্রবেশ করা হয়েছে।
Gson JSON Tree Model খুবই শক্তিশালী এবং নমনীয় উপায় JSON ডেটাকে হ্যান্ডল করার জন্য। এটি JSON ডেটার বিভিন্ন অংশে অ্যাক্সেস করতে এবং JSON ডেটাকে পরিবর্তন করতে সাহায্য করে। Gson দিয়ে JSON ডেটাকে গাছের মতো (tree structure) মডেলে রূপান্তর করে কাজ করা যায়, যা বিশেষ করে জটিল এবং নেস্টেড JSON ডেটা প্রক্রিয়া করার জন্য উপকারী।
Gson এর Tree Model একটি ফিচার যা JSON ডেটাকে একটি tree structure আকারে রিপ্রেজেন্ট করে এবং বিভিন্ন ধরনের JSON ডেটা (যেমন JSON objects, arrays, primitive values) এর সাথে কাজ করার জন্য একটি শক্তিশালী API প্রদান করে। এটি বিশেষভাবে ব্যবহারকারীকে JSON ডেটার প্রতিটি উপাদানের সাথে ডাইনোমিকভাবে কাজ করার সুযোগ দেয়, যখন আপনি জানেন না JSON এর কাঠামো কী হবে বা যখন JSON structure খুব জটিল হয়।
Tree Model হলো JSON ডেটার স্ট্রাকচারাল রিপ্রেজেন্টেশন যা JsonElement নামক একটি বেস ক্লাস ব্যবহার করে। JsonElement এর বিভিন্ন subtype রয়েছে, যেমন JsonObject, JsonArray, JsonPrimitive, এবং JsonNull যা JSON এর বিভিন্ন অংশের প্রতিনিধিত্ব করে।
Tree Model এ JSON ডেটাকে গঠন করা হয় এবং JSON ডেটার উপাদানগুলোকে traversal বা manipulation করার জন্য বেশ কিছু মেথড এবং ক্লাস সরবরাহ করে।
Tree Model কীভাবে কাজ করে?
Gson এর Tree Model JSON ডেটাকে JsonElement হিসেবে মান্য করে এবং বিভিন্ন subclass এর মাধ্যমে ডেটার উপাদানগুলো রূপান্তরিত করা হয়। এই ধরনের মডেল ব্যবহার করে আপনি JSON ডেটার সঙ্গে আরও বেশি নির্ভুলভাবে এবং ডাইনামিকভাবে কাজ করতে পারেন।
Key Classes in Gson Tree Model:
JsonElement:- এটি বেস ক্লাস এবং এটি JSON object, array, primitive, null এর সাধারণ রিপ্রেজেন্টেশন।
JsonObject:- এটি JSON object রূপে কাজ করে এবং key-value পেয়ার ধারণ করে।
JsonArray:- এটি JSON array রূপে কাজ করে এবং বিভিন্ন মান ধারণ করতে পারে।
JsonPrimitive:- এটি primitive মান (যেমন: String, Number, Boolean) ধারণ করে।
JsonNull:- এটি null মানের জন্য ব্যবহৃত হয়।
Tree Model এর ব্যবহার:
Step 1: JSON কে Tree Model এ রূপান্তর করা
আপনি JSON ডেটাকে JsonElement-এ রূপান্তর করতে পারেন এবং এর মাধ্যমে JSON-এর যে কোনও অংশের সঙ্গে কাজ করতে পারেন।
import com.google.gson.*;
public class TreeModelExample {
public static void main(String[] args) {
String json = "{"
+ "\"name\":\"John\","
+ "\"age\":30,"
+ "\"isStudent\":false,"
+ "\"address\":{"
+ "\"street\":\"123 Main St\","
+ "\"city\":\"New York\""
+ "},"
+ "\"phoneNumbers\":["
+ "{\"type\":\"home\",\"number\":\"123-456-7890\"},"
+ "{\"type\":\"mobile\",\"number\":\"987-654-3210\"}"
+ "]"
+ "}";
// Gson instance
Gson gson = new Gson();
// Convert JSON string to JsonElement
JsonElement jsonElement = JsonParser.parseString(json);
// Check the type of the JsonElement
if (jsonElement.isJsonObject()) {
JsonObject jsonObject = jsonElement.getAsJsonObject();
// Accessing values from the JSON object
String name = jsonObject.get("name").getAsString();
int age = jsonObject.get("age").getAsInt();
boolean isStudent = jsonObject.get("isStudent").getAsBoolean();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Is Student: " + isStudent);
// Accessing nested JsonObject (address)
JsonObject address = jsonObject.getAsJsonObject("address");
String street = address.get("street").getAsString();
String city = address.get("city").getAsString();
System.out.println("Address: " + street + ", " + city);
// Accessing JsonArray (phoneNumbers)
JsonArray phoneNumbers = jsonObject.getAsJsonArray("phoneNumbers");
for (JsonElement phone : phoneNumbers) {
JsonObject phoneObject = phone.getAsJsonObject();
String type = phoneObject.get("type").getAsString();
String number = phoneObject.get("number").getAsString();
System.out.println(type + " Phone: " + number);
}
}
}
}
Output:
Name: John
Age: 30
Is Student: false
Address: 123 Main St, New York
home Phone: 123-456-7890
mobile Phone: 987-654-3210
Step 2: Tree Model এর মাধ্যমে JSON Manipulation
Tree Model আপনাকে JSON ডেটা থেকে ডেটা পড়া এবং পরিবর্তন করার জন্য সুবিধা প্রদান করে। আপনি JsonObject বা JsonArray এর মাধ্যমে JSON ডেটার মান পরিবর্তন করতে পারেন।
Manipulation Example:
import com.google.gson.*;
public class TreeModelManipulation {
public static void main(String[] args) {
String json = "{"
+ "\"name\":\"John\","
+ "\"age\":30,"
+ "\"isStudent\":false"
+ "}";
// Gson instance
Gson gson = new Gson();
// Convert JSON string to JsonElement
JsonElement jsonElement = JsonParser.parseString(json);
// Modify JSON Object (Tree Model)
if (jsonElement.isJsonObject()) {
JsonObject jsonObject = jsonElement.getAsJsonObject();
// Modifying existing fields
jsonObject.addProperty("name", "Jane"); // Change name to "Jane"
jsonObject.addProperty("age", 25); // Change age to 25
// Add a new property
jsonObject.addProperty("isEmployed", true);
// Output the modified JSON
System.out.println(gson.toJson(jsonObject)); // The modified JSON
}
}
}
Output:
{"name":"Jane","age":25,"isStudent":false,"isEmployed":true}
এখানে, আমরা JsonObject ব্যবহার করে একটি প্রপার্টি পরিবর্তন করেছি এবং নতুন প্রপার্টি যুক্ত করেছি।
Tree Model এর সুবিধা:
- Dynamic and Flexible:
- Tree Model ব্যবহার করে আপনি JSON ডেটা কাস্টমাইজ এবং ম্যানিপুলেট করতে পারেন, এমনকি JSON এর structure জানার আগেও। এটি ডাইনামিকভাবে ডেটার অংশে কাজ করতে সাহায্য করে।
- Type-Specific Access:
JsonObject,JsonArray,JsonPrimitive, ইত্যাদি ব্যবহার করে আপনি সুনির্দিষ্ট JSON ডেটার ধরন অনুযায়ী এক্সেস পেতে পারেন। এটি অত্যন্ত কার্যকরী যখন JSON এর structure পরিবর্তিত হতে পারে।
- Easy Traversal:
- Tree Model গুলি traversal বা iteration করার জন্য সহজ API সরবরাহ করে, যাতে JSON ডেটার ভিতরের মানগুলি সহজে অ্যাক্সেস করা যায়।
- No POJO Required:
JsonElementব্যবহার করে আপনি কোন POJO (Plain Old Java Object) ক্লাসের প্রয়োজন ছাড়াই JSON ডেটার সাথে কাজ করতে পারেন। এটি বিশেষভাবে যখন JSON structure খুবই জটিল বা পরিবর্তনশীল হয় তখন কার্যকরী।
কোথায় ব্যবহার করবেন?
- Dynamic JSON Handling: যখন JSON structure পরিবর্তনশীল বা আপনার কাছে JSON structure এর ধরন না থাকলে, তখন Tree Model ব্যবহার করে আপনি ডেটাকে ডাইনামিকভাবে পরিচালনা করতে পারেন।
- Complex JSON Parsing: যখন JSON স্ট্রাকচার জটিল, গভীর nested বা polymorphic হয়, তখন Tree Model সহজে এক্সেস করা যায়।
- Data Manipulation: JSON ডেটা read/write করতে এবং কাস্টমাইজ করতে যখন POJO ক্লাস ব্যবহার না করা হয়।
Gson এর Tree Model JSON ডেটাকে একটি tree-like structure এ রূপান্তর করে এবং এর বিভিন্ন অংশে সহজে কাজ করার সুযোগ দেয়। এটি বিশেষভাবে উপকারী যখন আপনি JSON এর structure জানেন না বা যখন JSON খুবই জটিল ও পরিবর্তনশীল হয়। JsonElement এবং এর subtype গুলি ব্যবহার করে আপনি JSON ডেটা সহজে manipulate, traverse, এবং modify করতে পারবেন।
Gson লাইব্রেরি JSON ডেটাকে Java অবজেক্টে রূপান্তর করতে এবং Java অবজেক্টকে JSON ডেটায় রূপান্তর করতে সহায়তা করে। JsonObject, JsonArray, এবং JsonPrimitive Gson এর তিনটি প্রধান উপাদান (classes), যা JSON ডেটাকে ম্যানিপুলেট করতে ব্যবহৃত হয়। এদের মাধ্যমে আপনি JSON ডেটাকে এক্সেস, তৈরি, এবং কাস্টমাইজ করতে পারেন।
1. JsonObject
JsonObject হল একটি JSON অবজেক্ট যা key-value পেয়ার ধারণ করে। এটি JSON ডেটার একটি অবজেক্ট রিপ্রেজেন্টেশন হিসেবে কাজ করে, যেখানে key স্ট্রিং টাইপের এবং value JSON যেকোনো ডেটা টাইপ হতে পারে (যেমন, JsonPrimitive, JsonObject, JsonArray ইত্যাদি)।
JsonObject ব্যবহার:
Java Code Example:
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
JsonObject jsonObject = new JsonObject();
// Adding key-value pairs
jsonObject.addProperty("name", "Rahim");
jsonObject.addProperty("age", 30);
jsonObject.addProperty("isActive", true);
// Nested JsonObject
JsonObject address = new JsonObject();
address.addProperty("street", "123 Main St");
address.addProperty("city", "Dhaka");
// Adding nested JsonObject to the main JsonObject
jsonObject.add("address", address);
// Convert JsonObject to JSON string
String jsonString = jsonObject.toString();
System.out.println(jsonString);
}
}
আউটপুট:
{
"name": "Rahim",
"age": 30,
"isActive": true,
"address": {
"street": "123 Main St",
"city": "Dhaka"
}
}
এখানে, JsonObject ব্যবহার করে আমরা name, age, isActive এবং address এর key-value পেয়ার তৈরি করেছি। এছাড়া, address হল একটি নেস্টেড JsonObject যা অন্য একটি JsonObject হিসেবে যুক্ত করা হয়েছে।
2. JsonArray
JsonArray হল একটি JSON অ্যারে যা একটি সিকোয়েন্স বা তালিকা ধারণ করে, যার মধ্যে একাধিক JsonElement থাকতে পারে। এটি JSON ডেটার একটি অ্যারে রিপ্রেজেন্টেশন হিসেবে কাজ করে।
JsonArray ব্যবহার:
Java Code Example:
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
JsonArray jsonArray = new JsonArray();
// Adding JsonPrimitive elements
jsonArray.add("Apple");
jsonArray.add("Banana");
jsonArray.add("Orange");
// Adding a JsonObject to the array
JsonObject item = new JsonObject();
item.addProperty("name", "Mango");
item.addProperty("color", "Yellow");
jsonArray.add(item);
// Convert JsonArray to JSON string
String jsonString = jsonArray.toString();
System.out.println(jsonString);
}
}
আউটপুট:
["Apple", "Banana", "Orange", {"name":"Mango","color":"Yellow"}]
এখানে, JsonArray ব্যবহার করে আমরা কয়েকটি JsonPrimitive মান এবং একটি JsonObject যুক্ত করেছি। JsonArray JSON অ্যারে হিসেবে স্টোর করা হয়েছে।
3. JsonPrimitive
JsonPrimitive হল Gson এর একটি ক্লাস যা JSON-এর প্রিমিটিভ ডেটা টাইপ (যেমন, String, Number, Boolean) রিপ্রেজেন্ট করে। JsonPrimitive দিয়ে আপনি JSON স্ট্রিং, সংখ্যা বা বুলিয়ান ভ্যালু ম্যানিপুলেট করতে পারেন।
JsonPrimitive ব্যবহার:
Java Code Example:
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
JsonObject jsonObject = new JsonObject();
// Using JsonPrimitive for primitive data types
JsonPrimitive name = new JsonPrimitive("Rahim");
JsonPrimitive age = new JsonPrimitive(30);
JsonPrimitive isActive = new JsonPrimitive(true);
// Adding JsonPrimitive to JsonObject
jsonObject.add("name", name);
jsonObject.add("age", age);
jsonObject.add("isActive", isActive);
// Convert JsonObject to JSON string
String jsonString = jsonObject.toString();
System.out.println(jsonString);
}
}
আউটপুট:
{
"name": "Rahim",
"age": 30,
"isActive": true
}
এখানে, JsonPrimitive ব্যবহার করে আমরা String, Integer, এবং Boolean ধরনের প্রিমিটিভ মান যোগ করেছি।
JsonObject, JsonArray, এবং JsonPrimitive এর সংমিশ্রণ
এগুলোকে একত্রিত করে জটিল JSON ডেটা তৈরি করা যায়। আপনি যদি একাধিক JsonObject এবং JsonArray ব্যবহার করে JSON তৈরি করতে চান, তাহলে আপনি এসব উপাদানগুলিকে নেস্টেডভাবে যোগ করতে পারেন।
Complex Example Using All Three Classes:
Java Code Example:
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
// Create a JsonObject for user
JsonObject userObject = new JsonObject();
userObject.addProperty("userName", "Rahim");
userObject.addProperty("userAge", 30);
// Create JsonArray for hobbies
JsonArray hobbiesArray = new JsonArray();
hobbiesArray.add("Reading");
hobbiesArray.add("Cycling");
hobbiesArray.add("Traveling");
// Adding JsonArray to JsonObject
userObject.add("hobbies", hobbiesArray);
// Create JsonObject for address (nested object)
JsonObject addressObject = new JsonObject();
addressObject.addProperty("street", "123 Main St");
addressObject.addProperty("city", "Dhaka");
// Add nested JsonObject to main JsonObject
userObject.add("address", addressObject);
// Convert the final JsonObject to JSON string
String jsonString = userObject.toString();
System.out.println(jsonString);
}
}
আউটপুট:
{
"userName": "Rahim",
"userAge": 30,
"hobbies": ["Reading", "Cycling", "Traveling"],
"address": {
"street": "123 Main St",
"city": "Dhaka"
}
}
এখানে, আমরা একটি JsonObject তৈরি করেছি যা একাধিক JsonArray এবং JsonObject ধারণ করে, এবং একত্রে JSON ফরম্যাটে রূপান্তরিত হয়েছে।
সারাংশ:
JsonObject: JSON ডেটার অবজেক্ট রিপ্রেজেন্টেশন, যেখানে key-value পেয়ার থাকে। আপনিaddProperty()মেথড দিয়ে key-value পেয়ার যোগ করতে পারেন।JsonArray: JSON অ্যারে রিপ্রেজেন্টেশন, যা একাধিকJsonElementধারণ করে (যেমনJsonPrimitive,JsonObjectইত্যাদি)। এটি অ্যারের মতো ডেটা স্টোর করতে ব্যবহৃত হয়।JsonPrimitive: JSON এর প্রিমিটিভ ডেটা টাইপ যেমনString,Number, বাBooleanরিপ্রেজেন্টেশন। এটি JSON এর সরল মান ধারণ করে।
এগুলোকে একত্রে ব্যবহার করে আপনি খুবই জটিল JSON কাঠামো তৈরি এবং ম্যানিপুলেট করতে পারেন। Gson এই উপাদানগুলির মাধ্যমে JSON ডেটাকে আরও সুবিধাজনক এবং ডাইনামিকভাবে পরিচালনা করার সুযোগ দেয়।
Gson লাইব্রেরি JSON ডেটার Tree Structure এবং Traversing এর মাধ্যমে JSON ডেটা সহজে পরিচালনা এবং প্রক্রিয়া করার সুযোগ দেয়। Gson JSON ডেটাকে JsonObject, JsonArray, JsonElement এর মতো ক্লাসগুলির মাধ্যমে স্টোর করে এবং আপনি এসব ক্লাস ব্যবহার করে JSON ডেটার মধ্যে ট্রাভার্স (যাত্রা) করতে পারেন।
Gson Tree Structure:
JsonElement: এটি Gson এর বেস ক্লাস যা JSON ডেটার বিভিন্ন ধরনের উপাদান প্রতিনিধিত্ব করে (যেমনJsonObject,JsonArray,JsonPrimitive)।JsonObject: এটি JSON অবজেক্টকে প্রতিনিধিত্ব করে, যেখানে এক বা একাধিক key-value পেয়ার থাকে।JsonArray: এটি JSON অ্যারে প্রতিনিধিত্ব করে, যা একটি এলিমেন্টের অ্যারে বা তালিকা।JsonPrimitive: এটি JSON প্রিমিটিভ ভ্যালু (যেমন String, Number, Boolean) প্রতিনিধিত্ব করে।
JSON Data Tree Structure:
ধরা যাক আমাদের কাছে নিচের JSON ডেটা আছে:
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York"
},
"phoneNumbers": ["123-456-7890", "987-654-3210"]
}
এই JSON ডেটা Gson-এ Tree Structure হিসেবে তৈরি করা যাবে, যেখানে JsonObject প্রধান অটম্বারে JSON অবজেক্টটি সংরক্ষণ করবে এবং এর মধ্যে address এবং phoneNumbers ফিল্ডগুলোও JsonObject এবং JsonArray আকারে থাকবে।
Gson Tree Structure এবং Traversing উদাহরণ:
1. JSON ডেটা Tree Structure তৈরি করা:
প্রথমে, Gson ব্যবহার করে JSON স্ট্রিং থেকে JSON ডেটা গঠন করা হবে:
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
// JSON স্ট্রিং
String json = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 30,\n" +
" \"address\": {\n" +
" \"street\": \"123 Main St\",\n" +
" \"city\": \"New York\"\n" +
" },\n" +
" \"phoneNumbers\": [\"123-456-7890\", \"987-654-3210\"]\n" +
"}";
// Gson অবজেক্ট তৈরি করুন
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(json); // JSON স্ট্রিং থেকে JsonElement তৈরি
// Tree Structure দেখে JSON ডেটা প্রিন্ট করুন
System.out.println(element.toString());
}
}
আউটপুট:
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York"
},
"phoneNumbers": [
"123-456-7890",
"987-654-3210"
]
}
এখানে element একটি JsonElement যা JSON ডেটার পুরো ট্রি প্রতিনিধিত্ব করে।
2. JSON Tree Traversing (ট্রাভার্স করা):
আপনি Tree Structure এর মধ্যে ডেটা অ্যাক্সেস করতে এবং তার উপর অপারেশন করতে পারবেন। এটি করতে JsonObject, JsonArray, এবং JsonElement এর মেথড ব্যবহার করতে হবে।
a. JSON Object থেকে ফিল্ড অ্যাক্সেস করা:
public class Main {
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" +
" },\n" +
" \"phoneNumbers\": [\"123-456-7890\", \"987-654-3210\"]\n" +
"}";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(json);
// JsonObject এর মধ্যে "name" এবং "age" ফিল্ডগুলো অ্যাক্সেস করুন
JsonObject jsonObject = element.getAsJsonObject();
String name = jsonObject.get("name").getAsString(); // name ফিল্ড থেকে স্ট্রিং ভ্যালু নিন
int age = jsonObject.get("age").getAsInt(); // age ফিল্ড থেকে ইনটিজার ভ্যালু নিন
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
}
আউটপুট:
Name: John
Age: 30
এখানে, getAsJsonObject() মেথডের মাধ্যমে JsonObject অবজেক্টে রূপান্তর করা হয়েছে এবং তারপর get("name") ও get("age") ফিল্ডগুলো থেকে মানগুলো অ্যাক্সেস করা হয়েছে।
b. JSON Array Traversing:
যেহেতু JSON অ্যারে JsonArray হিসেবে থাকে, আপনি এই অ্যারের উপাদানগুলোকে ট্রাভার্স (ব্রাউজ) করতে পারেন:
public class Main {
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" +
" },\n" +
" \"phoneNumbers\": [\"123-456-7890\", \"987-654-3210\"]\n" +
"}";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(json);
JsonObject jsonObject = element.getAsJsonObject();
// "phoneNumbers" অ্যারে ট্রাভার্স করা
JsonArray phoneNumbers = jsonObject.getAsJsonArray("phoneNumbers");
for (JsonElement phone : phoneNumbers) {
System.out.println("Phone Number: " + phone.getAsString());
}
}
}
আউটপুট:
Phone Number: 123-456-7890
Phone Number: 987-654-3210
এখানে getAsJsonArray("phoneNumbers") মেথড ব্যবহার করে অ্যারে থেকে সমস্ত ফোন নম্বর বের করা হয়েছে এবং একটি লুপের মাধ্যমে প্রতিটি ফোন নম্বর প্রিন্ট করা হয়েছে।
c. Nested JSON Object Traversing:
যদি JSON-এ একটি নেস্টেড অবজেক্ট থাকে, যেমন address, আপনি সেই অবজেক্টটি ট্রাভার্স করতে পারবেন:
public class Main {
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" +
" },\n" +
" \"phoneNumbers\": [\"123-456-7890\", \"987-654-3210\"]\n" +
"}";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(json);
JsonObject jsonObject = element.getAsJsonObject();
// Nested "address" JSON Object ট্রাভার্স করা
JsonObject address = jsonObject.getAsJsonObject("address");
String street = address.get("street").getAsString();
String city = address.get("city").getAsString();
System.out.println("Street: " + street);
System.out.println("City: " + city);
}
}
আউটপুট:
Street: 123 Main St
City: New York
এখানে getAsJsonObject("address") ব্যবহার করে address ফিল্ড থেকে নেস্টেড JsonObject অ্যাক্সেস করা হয়েছে এবং তার মধ্যে থাকা street এবং city ফিল্ডগুলো থেকে মানগুলো বের করা হয়েছে।
সারসংক্ষেপ:
JsonElement: Gson-এ JSON ডেটার বেস ক্লাস, যা বিভিন্ন ধরনের JSON উপাদান (যেমনJsonObject,JsonArray,JsonPrimitive) প্রতিনিধিত্ব করে।JsonObject: JSON অবজেক্ট, যা key-value পেয়ার সংরক্ষণ করে।JsonArray: JSON অ্যারে, যা উপাদানগুলির তালিকা সংরক্ষণ করে।- Tree Traversing:
JsonObject,JsonArrayএবংJsonElementব্যবহার করে JSON ডেটার মধ্যে ট্রাভার্স করা এবং ফিল্ডগুলো অ্যাক্সেস করা। - Gson এর মাধ্যমে আপনি JSON ডেটা ম্যানিপুলেট করতে পারেন এবং তার মধ্যে নেস্টেড অবজেক্ট ও অ্যারে সহজেই ট্রাভার্স করতে পারেন।
এভাবে আপনি Gson এর Tree Structure ব্যবহার করে JSON ডেটা প্রক্রিয়া করতে পারেন, যা খুবই শক্তিশালী এবং নমনীয় পদ্ধতি।
Gson-এ JSON Data Manipulation এবং Customization এর মাধ্যমে আপনি JSON ডেটা সেরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে পারেন, এবং আপনার প্রয়োজন অনুসারে JSON ডেটার মধ্যে কাস্টম পরিবর্তন করতে পারবেন। Gson আপনাকে JSON ডেটা ম্যানিপুলেট করার জন্য বিভিন্ন ধরনের সুবিধা দেয়, যেমন:
- JSON অবজেক্ট তৈরি করা এবং তার সাথে কাজ করা (Creating and manipulating JSON objects)
- Customizing the JSON data (JSON ডেটার কাস্টমাইজেশন)
- Field exclusions and custom naming (ফিল্ড এক্সক্লুশন এবং কাস্টম নামকরণ)
- Complex transformations and handling nested structures (কোমপ্লেক্স ট্রান্সফরমেশন এবং নেস্টেড স্ট্রাকচার হ্যান্ডলিং)
এখানে আমরা বিভিন্ন টেকনিক্যাল বিষয়গুলি বিশদভাবে আলোচনা করবো।
1. JSON অবজেক্ট তৈরি করা এবং তার সাথে কাজ করা
Gson এর সাহায্যে আপনি JSON অবজেক্ট তৈরি করতে এবং JSON ডেটার সাথে ম্যানিপুলেশন করতে পারেন। এটি JsonObject, JsonArray, এবং JsonElement এর মতো ক্লাসের মাধ্যমে করা যায়।
উদাহরণ:
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
// JSON অবজেক্ট তৈরি করা
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name", "John Doe");
jsonObject.addProperty("age", 30);
// JSON এর মধ্যে আরেকটি অবজেক্ট যোগ করা
JsonObject address = new JsonObject();
address.addProperty("street", "123 Main St");
address.addProperty("city", "New York");
jsonObject.add("address", address);
// JSON ডেটা প্রিন্ট করা
System.out.println(jsonObject.toString());
}
}
আউটপুট:
{"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"New York"}}
এখানে, আমরা একটি JsonObject তৈরি করেছি এবং সেটির মধ্যে ডেটা যোগ করেছি। এর পাশাপাশি, একটি nested JsonObject (address) তৈরি করা হয়েছে এবং মূল jsonObject এর মধ্যে যোগ করা হয়েছে।
2. JSON Data Customization (কাস্টমাইজেশন)
Gson-এ JSON ডেটার কাস্টমাইজেশন করা খুবই সহজ। আপনি নির্দিষ্ট ফিল্ডগুলিকে এক্সক্লুড বা অন্তর্ভুক্ত করতে পারেন, কাস্টম নামকরণ কৌশল ব্যবহার করতে পারেন, এবং ডেটার ফরম্যাট পরিবর্তন করতে পারেন।
উদাহরণ 1: Field Exclusion (এক্সক্লুড করা)
কোনো ফিল্ডকে JSON ডেটায় অন্তর্ভুক্ত না করার জন্য @Expose অ্যানোটেশন এবং excludeFieldsWithoutExposeAnnotation() মেথড ব্যবহার করা হয়।
import com.google.gson.annotations.Expose;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
class Person {
@Expose
private String name;
@Expose(serialize = false, deserialize = false)
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
// Gson তৈরি করা
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
// Java Object তৈরি করা
Person person = new Person("John Doe", 30);
// Java Object কে JSON এ কনভার্ট করা
String json = gson.toJson(person);
System.out.println(json); // age ফিল্ডটি এক্সক্লুড হবে
}
}
আউটপুট:
{"name":"John Doe"}
এখানে, age ফিল্ডটি @Expose(serialize = false, deserialize = false) দ্বারা এক্সক্লুড করা হয়েছে, এবং excludeFieldsWithoutExposeAnnotation() দ্বারা শুধু @Expose অ্যানোটেশনযুক্ত ফিল্ডগুলোই JSON এ অন্তর্ভুক্ত হবে।
উদাহরণ 2: Custom Naming Strategy (কাস্টম নামকরণ কৌশল)
আপনি camelCase থেকে snake_case বা অন্য কোনো ফরম্যাটে নাম পরিবর্তন করতে পারেন FieldNamingStrategy ব্যবহার করে।
import com.google.gson.*;
import com.google.gson.FieldNamingStrategy;
import java.lang.reflect.Field;
class SnakeCaseNamingStrategy implements FieldNamingStrategy {
@Override
public String translateName(Field field) {
String name = field.getName();
StringBuilder snakeCaseName = new StringBuilder();
// Convert camelCase to snake_case
for (char c : name.toCharArray()) {
if (Character.isUpperCase(c)) {
snakeCaseName.append('_').append(Character.toLowerCase(c));
} else {
snakeCaseName.append(c);
}
}
return snakeCaseName.toString();
}
}
class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
public class Main {
public static void main(String[] args) {
// Gson তৈরি করা Custom Field Naming Strategy দিয়ে
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(new SnakeCaseNamingStrategy())
.create();
// Java Object তৈরি করা
Person person = new Person("John", "Doe");
// Java Object কে JSON এ কনভার্ট করা
String json = gson.toJson(person);
System.out.println(json); // first_name এবং last_name হবে JSON এর ফিল্ড
}
}
আউটপুট:
{"first_name":"John","last_name":"Doe"}
এখানে, SnakeCaseNamingStrategy কাস্টম নামকরণ কৌশলটি ব্যবহার করা হয়েছে, যা Java ফিল্ড নামকে snake_case-এ রূপান্তরিত করে।
3. Complex Data Transformation (কোমপ্লেক্স ডেটা রূপান্তর)
Gson দিয়ে আপনি JSON ডেটার মধ্যে complex transformations করতে পারেন যেমন nested structures, collections এবং কাস্টম ট্রান্সফরমেশন।
উদাহরণ 1: Nested JSON Structures
import com.google.gson.*;
class Person {
private String name;
private Address address;
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public Address getAddress() {
return address;
}
}
class Address {
private String street;
private String city;
public Address(String street, String city) {
this.street = street;
this.city = city;
}
public String getStreet() {
return street;
}
public String getCity() {
return city;
}
}
public class Main {
public static void main(String[] args) {
Address address = new Address("123 Main St", "New York");
Person person = new Person("John Doe", address);
// Gson তৈরি করা
Gson gson = new Gson();
// Java Object কে JSON এ কনভার্ট করা
String json = gson.toJson(person);
System.out.println(json); // Nested JSON হবে
}
}
আউটপুট:
{"name":"John Doe","address":{"street":"123 Main St","city":"New York"}}
এখানে, Person অবজেক্টের মধ্যে একটি Address অবজেক্ট ইনক্লুড করা হয়েছে, এবং Gson স্বয়ংক্রিয়ভাবে nested JSON তৈরি করেছে।
উদাহরণ 2: Custom JSON Transformation
import com.google.gson.*;
class Person {
private String firstName;
private String lastName;
private int age;
public Person(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
}
class PersonAdapter implements JsonSerializer<Person> {
@Override
public JsonElement serialize(Person src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("full_name", src.getFirstName() + " " + src.getLastName());
jsonObject.addProperty("age_in_years", src.getAge());
return jsonObject;
}
}
public class Main {
public static void main(String[] args) {
// Gson তৈরি করা কাস্টম সেরিয়ালাইজার দিয়ে
Gson gson = new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonAdapter())
.create();
Person person = new Person("John", "Doe", 30);
// Java Object কে JSON এ কনভার্ট করা
String json = gson.toJson(person);
System.out.println(json); // Full name এবং age_in_years হবে JSON ফিল্ড
}
}
আউটপুট:
{"full_name":"John Doe","age_in_years":30}
এখানে, আমরা Person ক্লাসের জন্য কাস্টম JsonSerializer ব্যবহার করেছি, যা full_name এবং age_in_years নামক কাস্টম JSON ফিল্ড তৈরি করেছে।
- JSON Data Manipulation এর মাধ্যমে আপনি JSON অবজেক্ট তৈরি করতে, কাস্টম নামকরণ কৌশল প্রয়োগ করতে, এবং JSON ডেটায় পরিবর্তন (customization) করতে পারেন।
- Gson এর সাহায্যে আপনি nested structures, complex data transformations, এবং custom serialization/deserialization ব্যবহার করে JSON ডেটা পরিচালনা করতে পারেন।
Read more