JSON (JavaScript Object Notation) হল একটি টেক্সট-ভিত্তিক ডেটা বিনিময় ফরম্যাট যা JavaScript অবজেক্ট সিনট্যাক্সের উপর ভিত্তি করে তৈরি। এটি সর্বত্র ব্যবহৃত হয়: REST API এবং কনফিগারেশন ফাইল থেকে শুরু করে ডেটাবেস এবং মোবাইল অ্যাপ্লিকেশনে ডেটা সংরক্ষণ পর্যন্ত। অফিসিয়াল JSON ওয়েবসাইট অনুসারে, ফরম্যাটটি ভাষা-স্বাধীন এবং প্রায় সকল আধুনিক প্ল্যাটফর্ম দ্বারা সমর্থিত। JSON ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা স্থানান্তরের জন্য ডি-ফ্যাক্টো স্ট্যান্ডার্ডে পরিণত হয়েছে।
মূল বিষয়
JSON হল গঠিত ডেটা উপস্থাপনের জন্য একটি টেক্সট ফরম্যাট, যা JavaScript সিনট্যাক্সের উপর ভিত্তি করে তৈরি। JavaScript-এ এর উৎপত্তি সত্ত্বেও, ফরম্যাটটি সম্পূর্ণ ভাষা-স্বাধীন — সকল জনপ্রিয় প্রোগ্রামিং ভাষার জন্য পার্সার এবং সিরিয়ালাইজার বিদ্যমান।
JSON-এর ইতিহাস ২০০০-এর দশকের শুরুর দিকে শুরু হয়, যখন ডগলাস ক্রকফোর্ড ডেটা বিনিময়ের জন্য JavaScript সিনট্যাক্সের একটি উপসেট বের করেন। ২০১৩ সালে, ফরম্যাটটি ECMA-404 হিসেবে মানায়িত হয়, এবং পরে ISO/IEC 21778:2017 হিসেবে। নামটি JavaScript Object Notation-এর সংক্ষিপ্ত রূপ।
JSON-এর প্রধান সুবিধা হল এর ন্যূনতম সিনট্যাক্স। ডেটা বর্ণনা করতে মাত্র ছয়টি ধরন ব্যবহার করা হয়: স্ট্রিং, সংখ্যা, বুলিয়ান, null, অ্যারে এবং অবজেক্ট। এটি অ্যাপ্লিকেশনে ব্যবহৃত যেকোনো ডেটা কাঠামো উপস্থাপনের জন্য যথেষ্ট।
JSON সিনট্যাক্স অত্যন্ত সরল: ডেটা কী-মান জোড়া হিসেবে উপস্থাপিত হয়, যেখানে কীটি ডাবল কোটেশনের মধ্যে একটি স্ট্রিং এবং মানটি ছয়টি মৌলিক ধরনের একটি। অবজেক্টগুলি কার্লি ব্রেসের মধ্যে আবদ্ধ থাকে, অ্যারেগুলি স্কোয়ার ব্রেসের মধ্যে। স্ট্রিংগুলিকে ডাবল কোটেশন ব্যবহার করতে হবে; সিঙ্গেল কোটেশন অনুমোদিত নয়।
JSON-এ সংখ্যাগুলি পূর্ণসংখ্যা বা ফ্লোটিং-পয়েন্ট, ধনাত্মক বা ঋণাত্মক, ঘাতাংক সহ হতে পারে। বুলিয়ান মানগুলি true এবং false লিটারেল দ্বারা উপস্থাপিত হয়, এবং মানের অনুপস্থিতি null দ্বারা। অ্যারেতে যেকোনো ধরনের মানের একটি ক্রমিক সেট থাকে, যার মধ্যে নেস্টেড অ্যারে এবং অবজেক্ট অন্তর্ভুক্ত।
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "নেস্টেড সমর্থন"
}
}
| ধরন | উদাহরণ | বিবরণ |
|---|---|---|
| স্ট্রিং | “টেক্সট” |
ডাবল কোটেশনের মধ্যে, এস্কেপ সিকোয়েন্স সহ |
| সংখ্যা | 42 |
পূর্ণসংখ্যা, ফ্লোটিং-পয়েন্ট, ঘাতাংক |
| বুলিয়ান | true |
true বা false — কোটেশন ছাড়া |
| null | null |
মানের অনুপস্থিতি |
| অবজেক্ট | {} |
কী-মান জোড়ার অক্রমিক সেট |
| অ্যারে | [] |
মানের ক্রমিক তালিকা |
JSON মোবাইল এবং ওয়েব ডেভেলপমেন্টে REST API-র জন্য প্রাথমিক ডেটা বিনিময় ফরম্যাট। সার্ভার প্রতিক্রিয়া বডিতে JSON পাঠায়, ক্লায়েন্ট অনুরোধ বডিতে। JSON-এর জন্য স্ট্যান্ডার্ড Content-Type হেডার হল application/json।
আধুনিক REST API সকল ধরনের ডেটা প্রেরণের জন্য JSON ব্যবহার করে: সরল তালিকা থেকে শুরু করে সত্ত্বাগুলির মধ্যে সম্পর্ক সহ জটিল নেস্টেড কাঠামো পর্যন্ত। ক্লায়েন্ট লাইব্রেরি (যেমন JavaScript-এ Axios বা Android-এ Retrofit) স্বয়ংক্রিয়ভাবে JSON সিরিয়ালাইজ এবং ডিসিরিয়ালাইজ করে, ডেভেলপারকে ম্যানুয়াল পার্সিং থেকে মুক্ত করে।
REST API-তে JSON-এর একটি গুরুত্বপূর্ণ সুবিধা হল কোয়েরি প্যারামিটারের মাধ্যমে আংশিক ডেটা স্থানান্তরের (আংশিক প্রতিক্রিয়া) ক্ষমতা, পাশাপাশি সার্ভারে অতিরিক্ত অনুরোধ ছাড়াই নেস্টেড রিসোর্স সমর্থন।
JSON পার্সিং মোবাইল প্ল্যাটফর্মে অন্তর্নির্মিত সরঞ্জাম ব্যবহার করে করা হয়। Android Google-এর Gson বা Square-এর Moshi ব্যবহার করে, iOS JSONDecoder-এর সাথে Codable প্রোটোকল ব্যবহার করে। প্রতিটি প্ল্যাটফর্ম JSON-কে নেটিভ অবজেক্টে এবং পিছনে রূপান্তরের জন্য সুবিধাজনক সরঞ্জাম প্রদান করে।
Android-এ, জনপ্রিয় পদ্ধতি Gson বা Moshi ব্যবহার করে। শুধু @SerializedName অ্যানোটেশন সহ একটি ডেটা ক্লাস সংজ্ঞায়িত করুন এবং ডিসিরিয়ালাইজেশনের জন্য fromJson কল করুন। লাইব্রেরি স্বয়ংক্রিয়ভাবে JSON ফিল্ডের নামগুলিকে ক্লাস প্রপার্টির সাথে ম্যাপ করে।
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class User(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("email") val email: String
)
fun parseJson(jsonString: String): User {
val gson = Gson()
return gson.fromJson(jsonString, User::class.java)
}
iOS-এ, JSONDecoder-এর সাথে অন্তর্নির্মিত Codable প্রোটোকল ব্যবহার করা হয়। ডেটা কাঠামো Codable-এর সাথে সঙ্গতিপূর্ণ একটি struct হিসেবে ঘোষণা করা হয়, যার পরে JSON একটি লাইনে পার্স করা হয়। JSONEncoder বিপরীত সিরিয়ালাইজেশন করে — সার্ভারে পাঠানোর জন্য অবজেক্টকে JSON-এ রূপান্তর করে।
import Foundation
struct User: Codable {
let id: Int
let name: String
let email: String
}
func parseJSON(from data: Data) throws -> User {
let decoder = JSONDecoder()
return try decoder.decode(User.self, from: data)
}
JSON এবং XML হল গঠিত ডেটা প্রেরণের দুটি প্রধান ফরম্যাট। JSON সরলতা এবং কর্মক্ষমতায় জয়ী হয়, XML কঠোরতা এবং যাচাইকরণে। এগুলির মধ্যে পছন্দ প্রকল্পের প্রয়োজনীয়তার উপর নির্ভর করে: REST API বেশি বার JSON ব্যবহার করে, স্কিমা সহ জটিল ডকুমেন্ট XML ব্যবহার করে।
XML-এর প্রতিটি এলিমেন্টের জন্য ক্লোজিং ট্যাগ প্রয়োজন, যা JSON-এর তুলনায় ডেটার আকার 2-3 গুণ বাড়িয়ে দেয়। একই সময়ে, XML নেমস্পেস, XSD স্কিমা, অ্যাট্রিবিউট এবং XSLT রূপান্তর সমর্থন করে, যা এটিকে ডকুমেন্ট ম্যানেজমেন্ট এবং এন্টারপ্রাইজ সিস্টেম ইন্টিগ্রেশন কাজের জন্য আরও শক্তিশালী করে।
| বৈশিষ্ট্য | JSON | XML |
|---|---|---|
| সিনট্যাক্স | ন্যূনতম, কী-মান | ট্যাগ-ভিত্তিক, খোলা এবং বন্ধ করার ট্যাগ |
| ডেটার আকার | কম্প্যাক্ট | JSON-এর চেয়ে 2-3 গুণ বড় |
| ডেটার ধরন | ছয়টি মৌলিক ধরন | শুধু টেক্সট, স্কিমার মাধ্যমে ধরন |
| যাচাইকরণ | কোনো অন্তর্নির্মিত নেই, JSON Schema-র মাধ্যমে | XSD — কঠোর এবং পরিপক্ক |
| নেমস্পেস | কোনোটি নেই | পূর্ণ নেমস্পেস সমর্থন |
| পার্সিং গতি | উচ্চ | জটিলতার কারণে কম |
উদাহরণগুলি মোবাইল ডেভেলপমেন্টে JSON-এর সাথে সাধারণ কার্যক্রম প্রদর্শন করে: API প্রতিক্রিয়া পার্স করা, পাঠানোর জন্য JSON তৈরি করা এবং নেস্টেড কাঠামো প্রক্রিয়াকরণ। এই প্যাটার্নগুলি বোঝা যেকোনো মোবাইল অ্যাপ্লিকেশন ডেভেলপারের জন্য অপরিহার্য।
JavaScript-এ, JSON.stringify একটি অবজেক্টকে JSON স্ট্রিং-এ রূপান্তর করে। দ্বিতীয় আর্গুমেন্টটি নির্বাচনী সিরিয়ালাইজেশনের জন্য কী-গুলির একটি অ্যারে বা একটি রিপ্লেসার ফাংশন হতে পারে। তৃতীয় আর্গুমেন্টটি ফরম্যাটিংয়ের জন্য ইন্ডেন্টেশন সেট করে।
interface Order {
id: string;
items: OrderItem[];
total: number;
createdAt: string;
}
const order: Order = {
id: 'ord_001',
items: [{ product: 'phone', quantity: 2 }],
total: 1599.98,
createdAt: '2026-07-03T10:00:00Z'
};
const jsonString = JSON.stringify(order, null, 2);
Moshi লাইব্রেরির সাথে Kotlin-এ, নেস্টেড JSON অবজেক্টগুলি নেস্টেড ডেটা ক্লাসের মাধ্যমে পরিচালনা করা হয়। @Json অ্যানোটেশন JSON ফিল্ডের নাম নির্দিষ্ট করে যদি এটি ক্লাস প্রপার্টির নাম থেকে ভিন্ন হয়। অ্যারেগুলি এলিমেন্টের ধরন সহ List হিসেবে উপস্থাপিত হয়।
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
data class ApiResponse(
val status: String,
val data: List<Product>,
val pagination: Pagination
)
data class Product(
val id: Int,
val title: String,
val price: Double
)
data class Pagination(
val page: Int,
val total: Int
)
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
JSON Schema হল একটি JSON ডকুমেন্টের কাঠামো বর্ণনার জন্য একটি ভাষা, যা XML-এর জন্য XSD-এর মতো। JSON Schema ব্যবহার করে, আপনি আবশ্যক ফিল্ড, ডেটার ধরন, মানের পরিসর, স্ট্রিং প্যাটার্ন এবং নেস্টেড কাঠামো নির্দিষ্ট করতে পারেন। স্কিমা যাচাইকরণ অ্যাপ্লিকেশনে প্রক্রিয়াকরণের আগে ডেটা ত্রুটি সনাক্ত করে।
JSON Schema ব্যাপকভাবে REST API ডকুমেন্টেশনের জন্য OpenAPI (Swagger)-এ, ইনপুট ডেটা যাচাইকরণ ফর্মে এবং পরীক্ষায় ব্যবহৃত হয়। স্কিমা ফাইলটি নিজেই একটি JSON ডকুমেন্ট, যা স্ট্যান্ডার্ড JSON পার্সারকে এটি পড়তে অনুমতি দেয়। সকল জনপ্রিয় প্রোগ্রামিং ভাষার জন্য অনলাইন ভ্যালিডেটর এবং লাইব্রেরি বিদ্যমান।
মোবাইল ডেভেলপমেন্টে, JSON Schema পরীক্ষার সময় সার্ভার প্রতিক্রিয়া যাচাই করতে এবং কনফিগারেশন ফাইল চেক করতে ব্যবহৃত হয়। Android-এ network-validator এবং json-schema-validator-এর মতো লাইব্রেরি ডেভেলপমেন্ট প্রক্রিয়ায় সরাসরি যাচাইকরণ এম্বেড করার অনুমতি দেয়, প্রাথমিক পর্যায়ে ত্রুটি প্রতিরোধ করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
JSON ছয়টি ধরন সমর্থন করে: স্ট্রিং (ডাবল কোটেশনে), সংখ্যা (পূর্ণসংখ্যা এবং ফ্লোটিং-পয়েন্ট), বুলিয়ান (true/false), null, অবজেক্ট ({}তে কী-মান জোড়া) এবং অ্যারে ([]তে মানের তালিকা)। এটি অ্যাপ্লিকেশনে যেকোনো ডেটা কাঠামোর জন্য যথেষ্ট।
না, JSON মান মন্তব্য সমর্থন করে না। আপনার যদি মন্তব্যের প্রয়োজন হয়, তাহলে JSON5 (বর্ধিত JSON) ব্যবহার করুন অথবা একটি বিবরণ ফিল্ড যোগ করুন, উদাহরণস্বরূপ “_comment”: “ব্যাখ্যা”। কিছু টুল, যেমন VS Code, কনফিগারেশন JSON ফাইলে মন্তব্য সমর্থন করে, তবে এটি একটি অ-মানক এক্সটেনশন।
JSONB হল PostgreSQL-এ JSON-এর জন্য একটি বাইনারি স্টোরেজ ফরম্যাট। টেক্সট JSON-এর বিপরীতে, JSONB প্রক্রিয়াকরণে দ্রুততর, ইনডেক্সিং (GIN ইনডেক্স) সমর্থন করে এবং কী-এর স্বতন্ত্রতা নিশ্চিত করে। তবে, JSONB যোগ করা মেটাডেটার কারণে ডিস্কে বেশি স্থান নেয়।
দ্রুত পরীক্ষার জন্য JSONLint (jsonlint.com), try-catch সহ JavaScript-এ অন্তর্নির্মিত JSON.parse(), বা IDE প্লাগইন ব্যবহার করুন। যাচাইকরণে সঠিক কোটেশন, ব্র্যাকেট বন্ধ হওয়া এবং ধরনের সামঞ্জস্য পরীক্ষা অন্তর্ভুক্ত। জটিল স্কিমার জন্য, JSON Schema Validator ব্যবহার করুন।
JSON স্পেসিফিকেশনে কোনো সীমা নেই। বাস্তবে, আকার ডিভাইস মেমরি এবং পার্সার ক্ষমতা দ্বারা সীমিত। মোবাইল অ্যাপ্লিকেশনের জন্য, প্রতি প্রতিক্রিয়ায় 1-2 MB-র বেশি না করার সুপারিশ করা হয়, এবং বড় ডেটার জন্য পেজিনেশন বা স্ট্রিমিং ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন