"হাই, অ্যামিগো!"
"হাই, এলি!"
"যেহেতু আপনি ইতিমধ্যে JSON এর সাথে পরিচিত হয়েছেন, আসুন আজ এটি সম্পর্কে আরও কথা বলি।"
"ঠিক আছে। এটা সাধারণত কোথায় ব্যবহৃত হয়?"
"এটি সাধারণত কীভাবে কাজ করে তা এখানে। কেউ (ক্লায়েন্ট) একটি জাভা প্রোগ্রাম (সার্ভার) থেকে ডেটার অনুরোধ করে। প্রোগ্রামটি জাভা অবজেক্ট তৈরি করে এবং ডাটাবেস থেকে তথ্য দিয়ে সেগুলি পূরণ করে। এটি তারপরে তাদের একটি ফর্ম্যাটে রূপান্তর করে যা অনুরোধকারী (ক্লায়েন্ট) ) বুঝতে পারে, যেমন JSON, এবং তাদের ফেরত পাঠায়।"
"জাভাতে JSON এর সাথে কীভাবে কাজ করতে হয় তা আমি আপনাকে বলি। মূলত, আমাদের শুধুমাত্র দুটি জিনিস করতে হবে: JSON ফরম্যাটে জাভা অবজেক্টকে সিরিয়ালাইজ করুন এবং JSON ফরম্যাট থেকে জাভা অবজেক্টকে ডিসিরিয়ালাইজ করুন।"
"অন্য কথায়, JSON হল এক প্রোগ্রাম থেকে অন্য প্রোগ্রামে মেসেজ/ডেটা পাঠানোর জন্য একটি স্ট্যান্ডার্ড। এরকম অনেক স্ট্যান্ডার্ড আছে। কিন্তু যদি প্রোগ্রামটি জাভাস্ক্রিপ্টে লেখা হয়, তাহলে এটি সাধারণত JSON ব্যবহার করার চেষ্টা করে।"
"ঠিক আছে আমি প্রস্তুত."
"দারুণ। তাহলে শুরু করা যাক।"
"আপনি ইতিমধ্যেই জানেন, জাভাতে বিল্ট-ইন স্ট্যান্ডার্ড সিরিয়ালাইজেশন টুল রয়েছে। কিন্তু তারা JSON সমর্থন করে না। তাই, যদি আপনার JSON-এ কোনো বস্তুকে সিরিয়ালাইজ করার প্রয়োজন হয়, তাহলে আপনি জনপ্রিয় ফ্রেমওয়ার্ক (লাইব্রেরি) ব্যবহার করতে পারেন যেগুলো কীভাবে জানে। এটা কর."
"এই বিভিন্ন কাঠামোর মধ্যে পার্থক্য কি?"
"এগুলি সাধারণত তাদের জটিলতার স্তরে ভিন্ন হয়: এমন কাঠামো রয়েছে যা শুধুমাত্র খুব মৌলিক কাজ করতে পারে, কিন্তু সেগুলি খুব ছোট এবং সহজ। এবং বড় জটিল কাঠামো রয়েছে যা আরও অনেক কিছু করতে পারে।"
"জ্যাকসন সবচেয়ে জনপ্রিয় ফ্রেমওয়ার্কগুলির মধ্যে একটি। আমরা JSON এর সাথে কীভাবে কাজ করতে হয় তা দেখতে আমরা এটিকে একটি উদাহরণ হিসাবে ব্যবহার করব।"
"প্রথমে, আপনাকে এই ফ্রেমওয়ার্কটি ডাউনলোড করতে হবে এবং এটিকে আপনার প্রোজেক্টে যুক্ত করতে হবে। আপনাকে এটি সরাসরি IntelliJ IDEA-তে করতে হবে। আপনি এই লিঙ্কটি ব্যবহার করে ফ্রেমওয়ার্কটি ডাউনলোড করতে পারেন। "
"সম্পন্ন."
"দারুণ। তাহলে চলুন।"
"একটি জাভা অবজেক্টকে JSON-এ রূপান্তর করা এটিকে সিরিয়ালাইজ করার মতোই সহজ। এটি করার জন্য, একটি বিশেষ অবজেক্টম্যাপার ক্লাস রয়েছে (com.fasterxml.jackson.databind.ObjectMapper)।"
"আমাকে একটি কাজের উদাহরণ দেখাতে দিন, এবং তারপরে আমরা এটি বিশ্লেষণ করব:"
public static void main(String[] args) throws IOException
{
// Create an object to be serialized into JSON
Cat cat = new Cat();
cat.name = "Missy";
cat.age = 5;
cat.weight = 4;
// Write the result of the serialization to a StringWriter
StringWriter writer = new StringWriter();
// This is the Jackson object that performs the serialization
ObjectMapper mapper = new ObjectMapper();
// And here's the serialization itself: the first argument is where, and the second is what
mapper.writeValue(writer, cat);
// Convert everything written to the StringWriter into a String
String result = writer.toString();
System.out.println(result);
}
@JsonAutoDetect
class Cat
{
public String name;
public int age;
public int weight;
Cat(){}
}
{"name":"Missy", "age":5, "weight":4}
"এখানে কিভাবে এটা কাজ করে:"
"4-7 লাইনে, আমরা একটি বিড়াল অবজেক্ট তৈরি করি এবং এটি ডেটা দিয়ে পূরণ করি।"
"লাইন 10 এ, আমরা একটি রাইটার অবজেক্ট তৈরি করি যেখানে আমরা অবজেক্টের একটি JSON-স্ট্রিং উপস্থাপনা লিখব।"
"13 লাইনে, আমরা একটি অবজেক্টম্যাপার অবজেক্ট তৈরি করি যা সমস্ত সিরিয়ালাইজেশন সম্পাদন করবে।"
"16 লাইনে, আমরা লেখকের কাছে বিড়াল বস্তুর JSON উপস্থাপনা লিখি ।"
"19-20 লাইনে, আমরা স্ক্রীনে ফলাফল প্রদর্শন করি।"
"সবকিছুই বেশ সহজ দেখাচ্ছে। জাভাতে নেটিভ সিরিয়ালাইজেশনের চেয়ে কঠিন নয়।"
"ডিসিরিয়ালাইজেশন দেখতে কেমন হবে?"
"এটি প্রায় একই, শুধু ছোট:"
public static void main(String[] args) throws IOException
{
String jsonString = "{ \"name\":\"Missy\", \"age\":5, \"weight\":4}";
StringReader reader = new StringReader(jsonString);
ObjectMapper mapper = new ObjectMapper();
Cat cat = mapper.readValue(reader, Cat.class);
}
@JsonAutoDetect
class Cat
{
public String name;
public int age;
public int weight;
Cat() { }
}
"এটি আরও সহজ। আমরা অবজেক্টম্যাপার নিয়ে যাই এবং এটিকে JSON-এর সাথে একটি স্ট্রিং বা স্ট্রিংরিডার পাস করি, সেইসাথে অবজেক্টের ক্লাস ডিসিরিয়ালাইজ করা হয়। তারপরে আমরা readValue পদ্ধতি বলি , এবং আউটপুট হিসাবে আমরা একটি রেডিমেড জাভা অবজেক্ট পাই। সমস্ত ডেটা।"
"ঠিক আছে, এটা ঠিক জাভাতে ডিসিরিয়ালাইজেশনের মতো।"
"প্রায়। JSON-এ সিরিয়ালাইজ করা বা ডিসিরিয়ালাইজ করা বস্তুর উপর বেশ কিছু প্রয়োজনীয়তা রাখা হয়েছে:"
" 1) ক্ষেত্রগুলি অবশ্যই দৃশ্যমান হতে হবে: সেগুলি অবশ্যই সর্বজনীন হতে হবে বা গেটার এবং সেটার থাকতে হবে"
" 2) অবশ্যই একটি ডিফল্ট কনস্ট্রাক্টর থাকতে হবে (একটি প্যারামিটার ছাড়া)"
"আমি দেখতে পাচ্ছি। এটা খুব আশ্চর্যজনক নয়। কিন্তু জাভা সবকিছুকে সিরিয়াল করেছে, এমনকি ব্যক্তিগত ক্ষেত্রও।"
"আচ্ছা, ওটা জাভা ছিল। এতে লুকানো ডেটার অ্যাক্সেস আছে। আপনি নিজের থেকে লুকাতে পারবেন না।"
"এখানে একটি তৃতীয় দিক আছে। আমি আশা করি আপনি ক্যাট ক্লাসে @JsonAutoDetect টীকাটি লক্ষ্য করেছেন?"
"হ্যাঁ। আমি শুধু জিজ্ঞেস করতেই ছিলাম এটা কি।"
"এটি একটি টীকা: জ্যাকসন ফ্রেমওয়ার্কের জন্য হাউসকিপিং তথ্য। সঠিক টীকা ব্যবহার করে, JSON-এ সিরিয়ালাইজেশনের ফলাফলের উপর আপনার অনেক নমনীয় নিয়ন্ত্রণ রয়েছে।"
"কুল! কি ধরনের টীকা আছে?"
"এখানে কিছু উদাহরণ আছে:"
টীকা | বর্ণনা |
---|---|
@JsonAutoDetect | ক্লাসের আগে রাখা হয়েছে। একটি ক্লাসকে JSON-এ সিরিয়ালাইজ করার জন্য প্রস্তুত হিসেবে চিহ্নিত করে। |
@জসন উপেক্ষা করুন | একটি সম্পত্তি আগে স্থাপন করা হয়েছে. সিরিয়ালাইজেশনের সময় সম্পত্তি উপেক্ষা করা হবে। |
@জসনপ্রপার্টি | একটি সম্পত্তি বা একটি গেটার বা সেটার আগে স্থাপন করা হয়. সিরিয়ালাইজেশনের সময় আপনাকে একটি ভিন্ন ক্ষেত্রের নাম উল্লেখ করতে দেয়। |
@JsonWriteNullProperties | ক্লাসের আগে রাখা হয়েছে। শূন্য অবজেক্ট ক্ষেত্র উপেক্ষা করা হবে না। |
@JsonPropertyOrder | ক্লাসের আগে রাখা হয়েছে। আপনাকে ক্রমিককরণের সময় ক্ষেত্রের ক্রম নির্দিষ্ট করতে দেয়। |
"কত মজার! আরো আছে?"
"অনেকগুলি আছে৷ কিন্তু আমরা এখনই সেগুলিকে কভার করব না৷ এখন আসুন আমাদের প্রথম উদাহরণটি সামান্য পুনরায় কাজ করি:"
public static void main(String[] args) throws IOException
{
Cat cat = new Cat();
cat.name = "Missy";
cat.age = 5;
cat.weight = 4;
StringWriter writer = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(writer, cat);
String result = writer.toString();
System.out.println(result);
}
@JsonAutoDetect
class Cat
{
@JsonProperty("alias")
public String name;
public int age;
@JsonIgnore
public int weight;
Cat() {
}
}
{"age":5, "alias":"Missy"}
"কোডটি একই রয়ে গেছে, কিন্তু আমি টীকা পরিবর্তন করেছি: আমি নামের ক্ষেত্রের জন্য অন্য নাম উল্লেখ করেছি: ওরফে। আমি ওজন ক্ষেত্রটিকে উপেক্ষা হিসাবে চিহ্নিত করেছি, যার ফলে JSON অবজেক্ট পরিবর্তন হয়েছে।"
"এটা ভালো যে আপনি এমন সবকিছু কাস্টমাইজ করতে পারেন। আমি মনে করি আমি অবশ্যই এটি দরকারী খুঁজে পাব।"
"এবং ডিসিরিয়ালাইজেশন বুঝবে কিভাবে এটির সাথে কাজ করতে হয়? JSON থেকে একটি জাভা অবজেক্টে ডিসিরিয়ালাইজ করার সময়, ক্যাট অবজেক্টের নাম ক্ষেত্রের উপনাম ক্ষেত্রের মান লেখা হবে?"
"হ্যাঁ, ডিসিরিয়ালাইজেশন যেমন করা উচিত তেমন কাজ করবে। এটি স্মার্ট।"
"তাহলে খুশি হওয়ার কি নেই।"
"এই আকর্ষণীয় পাঠের জন্য আপনাকে ধন্যবাদ, এলি।"
GO TO FULL VERSION