Haskell:
JSON এর সাথে কাজ করা

কিভাবে:

Haskell এর JavaScript এর মতো JSON এর জন্য নির্মিত সমর্থন নেই, কিন্তু Aeson এর মতো তৃতীয়-পক্ষের লাইব্রেরির সাহায্যে JSON নিয়ন্ত্রণ করা সহজ হয়ে যায়। Aeson উচ্চ-স্তর এবং নিম্ন-স্তরের ফাংশন উভয়ই প্রদান করে এনকোডিং (Haskell মানগুলি কে JSON এ রূপান্তর) এবং ডিকোডিং (JSON কে Haskell মানে পার্স করা) এর জন্য।

Aeson ইনস্টল করা

প্রথমে, আপনার প্রজেক্টের নির্ভরতা আপডেট করে Aeson যোগ করে নিন আপনার .cabal ফাইল আপডেট করে বা সরাসরি Stack বা Cabal ব্যবহার করে:

cabal update && cabal install aeson

অথবা, আপনি যদি Stack ব্যবহার করেন:

stack install aeson

JSON পার্স করা

আসুন Haskell টাইপে JSON ডেটা ডিকোড করার একটি বেসিক উদাহরণ দেখি। ধরা যাক আমাদের কাছে নিম্নলিখিত JSON রয়েছে যা একজন ব্যক্তির প্রতিনিধিত্ব করে:

{
  "name": "John Doe",
  "age": 30
}

প্রথমে, একটি সম্পর্কিত Haskell ডেটা টাইপ নির্ধারণ করুন এবং তাকে FromJSON এর একটি ইন্সট্যান্স করুন:

{-# LANGUAGE DeriveGeneric #-}

import GHC.Generics (Generic)
import Data.Aeson (FromJSON, decode)
import qualified Data.ByteString.Lazy as B

data Person = Person
  { name :: String
  , age :: Int
  } deriving (Generic, Show)

instance FromJSON Person

-- ফাইল থেকে JSON ডিকোড করার ফাংশন
decodePerson :: FilePath -> IO (Maybe Person)
decodePerson filePath = do
  personJson <- B.readFile filePath
  return $ decode personJson

ব্যবহার: ধরা যাক, person.json উপরে দেখানো JSON ডেটা ধারণ করে, চালান:

main :: IO ()
main = do
  maybePerson <- decodePerson "person.json"
  print maybePerson

নমুনা আউটপুট:

Just (Person {name = "John Doe", age = 30})

Haskell মানগুলি কে JSON হিসেবে এনকোড করা

কোনও Haskell মানকে আবার JSON এ রূপান্তর করতে, আপনার ToJSON এর একটি ইন্সট্যান্স হিসাবে আপনার টাইপটি নির্ধারণ করতে হবে এবং তারপর encode ব্যবহার করতে হবে।

import Data.Aeson (ToJSON, encode)
import GHC.Generics (Generic)

-- ধরে নেওয়া হচ্ছে আগের Person টাইপ 

instance ToJSON Person

encodePerson :: Person -> B.ByteString
encodePerson = encode

main :: IO ()
main = do
  let person = Person "Jane Doe" 32
  putStrLn $ show $ encodePerson person

নমুনা আউটপুট:

{"name":"Jane Doe","age":32}

এই উদাহরণগুলি Aeson ব্যবহার করে Haskell এ JSON নিয়ে কাজ করার মৌলিকত্ব দেখায়। মনে রাখবেন, Aeson অনেক বেশি কিছু অফার করে, যা বিভিন্ন প্রয়োজন এবং পরিস্থিতিতে উপযোগী, যেমন কাস্টম পার্সিং নিয়ম, জটিল নেস্টেড JSON নিয়ে কাজ করা, এবং আরও অনেক কিছু।