JSON (JavaScript Object Notation) হল একটি হালকা, পাঠযোগ্য ডেটা বিনিময় ফরম্যাট যা সিস্টেম বা অ্যাপ্লিকেশনগুলির মধ্যে ডেটা আদান-প্রদানে ব্যাপকভাবে ব্যবহৃত হয়। স্কালায় JSON প্রসেসিং এবং সিরিয়ালাইজেশন করার জন্য বিভিন্ন লাইব্রেরি এবং টুলস রয়েছে। সাধারণত Play JSON, circe, এবং json4s লাইব্রেরি স্কালার মধ্যে JSON প্রসেসিং এবং সিরিয়ালাইজেশন করতে ব্যবহৃত হয়।
এখানে আমরা Play JSON এবং circe লাইব্রেরির সাহায্যে স্কালায় JSON প্রসেসিং এবং সিরিয়ালাইজেশন দেখব।
১. Play JSON
Play JSON হল একটি জনপ্রিয় JSON লাইব্রেরি যা Play Framework দ্বারা সরবরাহিত। এটি JSON ডেটাকে সহজে পার্স (parse) এবং সিরিয়ালাইজ (serialize) করার জন্য ব্যবহৃত হয়।
১.১ Play JSON লাইব্রেরি সেটআপ
প্রথমে আপনার build.sbt ফাইলে Play JSON লাইব্রেরি অন্তর্ভুক্ত করতে হবে:
libraryDependencies += "com.typesafe.play" %% "play-json" % "2.9.2"১.২ JSON সিরিয়ালাইজেশন ও ডেসিরিয়ালাইজেশন
Play JSON লাইব্রেরি দিয়ে JSON সিরিয়ালাইজেশন (অবজেক্ট থেকে JSON স্ট্রিং) এবং ডেসিরিয়ালাইজেশন (JSON স্ট্রিং থেকে অবজেক্ট) করা যায়।
JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন উদাহরণ:
import play.api.libs.json._
case class Person(name: String, age: Int)
// Implicit format for JSON conversion
object Person {
implicit val personFormat: OFormat[Person] = Json.format[Person]
}
object PlayJsonExample {
def main(args: Array[String]): Unit = {
// Creating an instance of Person
val person = Person("Alice", 30)
// Serializing Person to JSON
val json = Json.toJson(person)
println(json) // Output: {"name":"Alice","age":30}
// Deserializing JSON to Person
val jsonString = """{"name":"Bob","age":25}"""
val jsonObject = Json.parse(jsonString)
val parsedPerson = jsonObject.as[Person]
println(parsedPerson) // Output: Person(Bob,25)
}
}এখানে:
Json.toJson()মেথড ব্যবহার করে অবজেক্টকে JSON এ রূপান্তরিত করা হচ্ছে।Json.parse()এবংas[]ব্যবহার করে JSON ডেটাকে Scala অবজেক্টে রূপান্তরিত করা হচ্ছে।
২. Circe
Circe একটি হালকা এবং দ্রুত JSON লাইব্রেরি যা স্কালার মধ্যে JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন করার জন্য ব্যবহৃত হয়। Circe স্কালার জন্য ফাংশনাল প্রোগ্রামিং প্যাটার্ন অনুসরণ করে।
২.১ Circe লাইব্রেরি সেটআপ
Circe লাইব্রেরি ব্যবহার করতে হলে আপনাকে আপনার build.sbt ফাইলে নিচের লাইব্রেরি ডিপেন্ডেন্সি যুক্ত করতে হবে:
libraryDependencies += "io.circe" %% "circe-core" % "0.14.1",
"io.circe" %% "circe-generic" % "0.14.1",
"io.circe" %% "circe-parser" % "0.14.1"২.২ JSON সিরিয়ালাইজেশন ও ডেসিরিয়ালাইজেশন
Circe লাইব্রেরির মাধ্যমে JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন করা যায়। Circe সাধারণত io.circe.generic.auto._ এবং io.circe.syntax._ ব্যবহার করে।
Circe উদাহরণ:
import io.circe._
import io.circe.generic.auto._
import io.circe.parser._
import io.circe.syntax._
case class Person(name: String, age: Int)
object CirceExample {
def main(args: Array[String]): Unit = {
// Creating an instance of Person
val person = Person("Alice", 30)
// Serializing Person to JSON
val json: Json = person.asJson
println(json) // Output: {"name":"Alice","age":30}
// Deserializing JSON to Person
val jsonString = """{"name":"Bob","age":25}"""
val decodedPerson = decode[Person](jsonString)
decodedPerson match {
case Right(person) => println(person) // Output: Person(Bob,25)
case Left(error) => println(s"Error: $error")
}
}
}এখানে:
asJsonব্যবহার করেPersonঅবজেক্টকে JSON-এ রূপান্তর করা হয়েছে।decode[Person]ব্যবহার করে JSON স্ট্রিংকেPersonঅবজেক্টে ডেসিরিয়ালাইজ করা হয়েছে।
৩. JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন তুলনা (Play JSON vs Circe)
- Play JSON:
- ব্যবহার করা সহজ এবং Play Framework-এ প্রাক-কনফিগারড।
- JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশনের জন্য সোজা এবং সহজ কাস্টম ফরম্যাট তৈরি করতে সক্ষম।
- ভালোভাবে ইন্টিগ্রেটেড Play Framework-এর সাথে।
- Circe:
- ফাংশনাল স্টাইল এবং উচ্চমানের পারফরম্যান্স প্রদান করে।
- সরল এবং শক্তিশালী JSON ডেটা প্রসেসিংয়ের জন্য প্যাকেজ এবং কাস্টম ডেসিরিয়ালাইজেশন/সিরিয়ালাইজেশন সমর্থন করে।
io.circe.generic.auto._ব্যবহার করে সহজেই generic derivation করতে পারে।
৪. JSON Validation
স্কালায় JSON ভ্যালিডেশন করার জন্য আপনি Play JSON বা Circe-এর মাধ্যমে বিভিন্ন কাস্টম ভ্যালিডেশন করতে পারেন। উদাহরণস্বরূপ, কোন ভ্যালু যদি নির্দিষ্ট রেঞ্জের মধ্যে না থাকে, বা কোন ফিল্ড যদি অনুপস্থিত থাকে তবে তা চেক করা যায়।
উদাহরণ: Play JSON Validation
import play.api.libs.json._
case class Person(name: String, age: Int)
object Person {
implicit val personFormat: OFormat[Person] = Json.format[Person]
}
object PlayJsonValidationExample {
def main(args: Array[String]): Unit = {
val invalidJson = Json.obj("name" -> "Alice")
val result = invalidJson.validate[Person]
result match {
case JsSuccess(person, _) => println(s"Valid person: $person")
case JsError(errors) => println(s"Errors: $errors")
}
}
}এখানে:
validateমেথড ব্যবহার করে JSON এর মধ্যে থাকাPersonঅবজেক্টের সঠিকতা যাচাই করা হচ্ছে।JsErrorএর মাধ্যমে যদি কোন ত্রুটি থাকে, তা আউটপুট করা হয়।
সারাংশ
- JSON প্রসেসিং এবং সিরিয়ালাইজেশন স্কালায় সহজভাবে করা যায় বিভিন্ন লাইব্রেরির মাধ্যমে, যেমন Play JSON এবং Circe।
- Play JSON সহজ এবং দ্রুত JSON প্রসেসিং প্রদান করে, বিশেষত যখন Play Framework ব্যবহার করা হয়।
- Circe ফাংশনাল প্রোগ্রামিং স্টাইলে আরও শক্তিশালী JSON প্রসেসিং সমাধান প্রদান করে, এবং
Generic Derivation-এর মাধ্যমে কম কোডে টাইপ সেফ JSON সিরিয়ালাইজেশন/ডেসিরিয়ালাইজেশন করতে সাহায্য করে।
এই লাইব্রেরিগুলি ব্যবহার করে আপনি JSON ডেটার সাথে সহজেই কাজ করতে পারবেন এবং কোডের কার্যকারিতা ও পাঠযোগ্যতা উন্নত করতে পারবেন।