Skill

JSON ডেটা প্রসেসিং এবং ডিকোডিং

HTTP Requests এবং JSON Handling (HTTP এবং JSON হ্যান্ডলিং) - এল্ম (Elm) - Computer Programming

223

JSON (JavaScript Object Notation) হল একটি জনপ্রিয় ডেটা বিন্যাস, যা সাধারাণভাবে ওয়েব অ্যাপ্লিকেশন এবং API এর মধ্যে ডেটা আদান-প্রদান করতে ব্যবহৃত হয়। Elm এ JSON ডেটা প্রসেসিং এবং ডিকোডিং করার জন্য Json.Decode মডিউল ব্যবহার করা হয়। এর মাধ্যমে আপনি JSON ডেটাকে Elm এর ডেটা টাইপে রূপান্তর করতে পারেন।

এখানে JSON ডেটা প্রসেসিং এবং ডিকোডিং এর পুরো প্রক্রিয়া এবং Elm-এ এর ব্যবহার বিস্তারিতভাবে আলোচনা করা হলো।


১. Json.Decode মডিউল ইমপোর্ট করা

প্রথমে, JSON ডেটা ডিকোড করতে Json.Decode মডিউল ইমপোর্ট করতে হয়।

import Json.Decode exposing (decodeString, field, string, int)

এখানে, decodeString, field, string, এবং int ফাংশনগুলি ইমপোর্ট করা হয়েছে, যেগুলি JSON ডেটা ডিকোড করার জন্য ব্যবহৃত হবে।


২. JSON ডেটা ডিকোডিং

এখন, একটি JSON ডেটা স্ট্রিং ডিকোড করতে, আমাদের প্রথমে JSON ডেটার কাঠামো (structure) বুঝতে হবে এবং সেই অনুযায়ী Elm এর ডেটা টাইপ তৈরি করতে হবে।

উদাহরণ: JSON ডেটা ডিকোডিং

ধরা যাক, আমাদের একটি JSON ডেটা আছে যেটি একটি ব্যক্তির নাম এবং বয়স ধারণ করে:

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

এটি Elm এ ডিকোড করার জন্য আমরা Json.Decode মডিউল ব্যবহার করব।

Elm কোড:

import Json.Decode exposing (decodeString, field, string, int)

type alias Person =
    { name : String
    , age : Int
    }

decodePerson : String -> Result String Person
decodePerson jsonString =
    decodeString personDecoder jsonString

personDecoder : Json.Decode.Decoder Person
personDecoder =
    map2 Person
        (field "name" string)
        (field "age" int)

এখানে:

  1. Person একটি type alias তৈরি করা হয়েছে যা name এবং age ধারণ করবে।
  2. decodePerson ফাংশনটি একটি JSON স্ট্রিং গ্রহণ করে এবং তা personDecoder ব্যবহার করে Person টাইপে ডিকোড করে।
  3. personDecoder হল একটি decoder যা name এবং age ফিল্ড ডিকোড করতে field ফাংশন ব্যবহার করে। string এবং int ডেটা টাইপ দ্বারা মানগুলি নির্ধারণ করা হয়।

৩. JSON ডেটা ডিকোডের ফলাফল

Elm এ ডিকোডের ফলাফল সাধারণত Result টাইপের মাধ্যমে আসে, যা Ok (যদি ডেটা সঠিকভাবে ডিকোড হয়) অথবা Err (যদি কোনো ত্রুটি ঘটে) হতে পারে।

উদাহরণ:

testJson : String
testJson = """
{
  "name": "John Doe",
  "age": 30
}
"""

main =
    case decodePerson testJson of
        Ok person ->
            text ("Name: " ++ person.name ++ ", Age: " ++ String.fromInt(person.age))

        Err error ->
            text ("Error: " ++ error)

এখানে:

  • decodePerson ফাংশনটি testJson স্ট্রিংকে ডিকোড করতে চেষ্টা করবে।
  • যদি ডিকোড সফল হয়, Ok এর ভিতরে Person অবজেক্টটি থাকবে এবং আমরা তা UI-তে প্রদর্শন করব।
  • যদি কোনো ত্রুটি ঘটে, Err এর মাধ্যমে ত্রুটি বার্তা প্রদর্শন করা হবে।

৪. Nested JSON (নেস্টেড JSON ডেটা)

অধিকাংশ সময় JSON ডেটা নেস্টেড (অর্থাৎ অন্য JSON অবজেক্ট বা অ্যারে ধারণ করে) হতে পারে। এই ধরনের ডেটা ডিকোড করার জন্যও আমরা Json.Decode মডিউল ব্যবহার করি, তবে কিছু অতিরিক্ত স্টেপ প্রয়োজন হয়।

উদাহরণ: Nested JSON ডেটা

ধরা যাক, আমাদের একটি JSON ডেটা রয়েছে যেখানে address একটি অবজেক্ট:

{
  "name": "John Doe",
  "age": 30,
  "address": {
    "street": "123 Elm St",
    "city": "Metropolis"
  }
}

Elm কোড:

import Json.Decode exposing (decodeString, field, string, int, map2)

type alias Address =
    { street : String
    , city : String
    }

type alias Person =
    { name : String
    , age : Int
    , address : Address
    }

decodePerson : String -> Result String Person
decodePerson jsonString =
    decodeString personDecoder jsonString

personDecoder : Json.Decode.Decoder Person
personDecoder =
    map3 Person
        (field "name" string)
        (field "age" int)
        (field "address" addressDecoder)

addressDecoder : Json.Decode.Decoder Address
addressDecoder =
    map2 Address
        (field "street" string)
        (field "city" string)

এখানে:

  • addressDecoder একটি ডিকোডার তৈরি করা হয়েছে যা street এবং city ফিল্ডগুলি ডিকোড করবে এবং সেগুলি Address টাইপে রূপান্তর করবে।
  • personDecoder এই addressDecoder ব্যবহার করে address ফিল্ডটি ডিকোড করবে।

৫. JSON এ অ্যারে ডেটা ডিকোড করা

ধরা যাক, আমাদের JSON ডেটাতে একটি অ্যারে রয়েছে:

[
  { "name": "John", "age": 30 },
  { "name": "Alice", "age": 25 }
]

Elm কোড:

import Json.Decode exposing (decodeString, field, string, int, list)

type alias Person =
    { name : String
    , age : Int
    }

decodePersons : String -> Result String (List Person)
decodePersons jsonString =
    decodeString (list personDecoder) jsonString

personDecoder : Json.Decode.Decoder Person
personDecoder =
    map2 Person
        (field "name" string)
        (field "age" int)

এখানে:

  • decodePersons ফাংশনটি একটি JSON স্ট্রিং ধারণকারী Person অবজেক্টের একটি লিস্ট ডিকোড করবে।
  • list ফাংশনটি একটি JSON অ্যারে ডিকোড করার জন্য ব্যবহার করা হয়েছে।

৬. Error Handling with Decoding

Elm তে JSON ডিকোডিং-এর সময় যদি ডেটা সঠিক না থাকে, তবে ত্রুটি ঘটতে পারে। এই ত্রুটিগুলির মোকাবিলা করার জন্য Result টাইপ ব্যবহার করা হয়, যা Ok বা Err মান প্রদান করে।

উদাহরণ:

decodeJson : String -> Result String Person
decodeJson jsonString =
    case decodeString personDecoder jsonString of
        Ok person -> Ok person
        Err error -> Err ("Decoding failed: " ++ error)

এখানে, যদি ডেটা ডিকোড করতে ব্যর্থ হয়, তাহলে Err এর মাধ্যমে ত্রুটি বার্তা প্রদান করা হয়।


উপসংহার

Elm তে JSON ডেটা প্রসেসিং এবং ডিকোডিং একটি গুরুত্বপূর্ণ কাজ, বিশেষত যখন আপনি API থেকে ডেটা গ্রহণ করছেন। Json.Decode মডিউল ব্যবহার করে সহজে JSON ডেটাকে Elm এর টাইপে রূপান্তর করা যায় এবং এতে ত্রুটির ক্ষেত্রে কার্যকরী error handling করা সম্ভব হয়। JSON ডেটা ডিকোড করতে decodeString, field, map2, list ইত্যাদি ফাংশনগুলি ব্যবহৃত হয়, যা ডেটা স্ট্রাকচারের উপর নির্ভর করে কাস্টম ডিকোডার তৈরি করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...