Elm এ JSON Encode এবং JSON Decode হল একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা আপনাকে JSON ডেটা পাঠানোর (encode) এবং গ্রহণ করার (decode) জন্য ব্যবহার করতে হয়। JSON (JavaScript Object Notation) হল একটি সাধারণ ডেটা ফরম্যাট যা সার্ভারের সাথে ডেটা আদান-প্রদান করতে ব্যবহৃত হয়। Elm-এ, JSON.Encode এবং JSON.Decode মডিউলগুলি JSON ডেটা প্যাকেজ এবং আনপ্যাকেজ (serialize এবং deserialize) করতে ব্যবহৃত হয়।
এখানে Elm-এ JSON Encode এবং JSON Decode ব্যবহারের বিস্তারিত আলোচনা করা হলো।
১. JSON Encode (অর্থাৎ, JSON ডেটা তৈরি করা)
JSON Encode ব্যবহার করে আপনি Elm মডেল বা ডেটাকে JSON ফরম্যাটে রূপান্তরিত করতে পারেন, যাতে তা সার্ভারে পাঠানো যায়।
Sintax:
import Json.Encode exposing (encode, string, int, object, list)JSON Encode এর কিছু সাধারণ ফাংশন:
string: স্ট্রিং ডেটা এনকোড করতে।int: পূর্ণসংখ্যা ডেটা এনকোড করতে।float: ভাসমান সংখ্যা এনকোড করতে।object: অবজেক্ট (অথবা রেকর্ড) এনকোড করতে।list: একটি লিস্ট এনকোড করতে।
উদাহরণ: JSON Encode
import Json.Encode exposing (encode, string, int, object)
type alias Person =
{ name : String
, age : Int
}
encodePerson : Person -> String
encodePerson person =
encode 0 (object
[ ( "name", string person.name )
, ( "age", int person.age )
])
-- উদাহরণ:
person = { name = "Alice", age = 30 }
jsonString = encodePerson person -- JSON string তৈরি হবেএখানে:
encodePersonফাংশনটি একটি Person রেকর্ডকে JSON ফরম্যাটে রূপান্তরিত করে।objectব্যবহার করে একটি অবজেক্ট তৈরি করা হয়েছে এবং সেই অবজেক্টের ফিল্ডগুলো এনকোড করা হয়েছে।
আউটপুট হিসেবে:
{"name":"Alice","age":30}২. JSON Decode (অর্থাৎ, JSON ডেটা পার্স করা)
JSON Decode ব্যবহার করে আপনি সার্ভার থেকে প্রাপ্ত JSON ডেটাকে Elm মডেল বা ডেটাতে রূপান্তরিত করতে পারেন। এটি JSON ডেটার মধ্যে বিভিন্ন মান এবং অবজেক্ট ডিকোড করতে ব্যবহৃত হয়।
Sintax:
import Json.Decode exposing (decodeString, string, int, field, object, andThen)JSON Decode এর কিছু সাধারণ ফাংশন:
string: JSON স্ট্রিং ডেটা ডিকোড করতে।int: JSON পূর্ণসংখ্যা ডেটা ডিকোড করতে।field: অবজেক্টের একটি নির্দিষ্ট ফিল্ড ডিকোড করতে।object: একটি অবজেক্ট ডিকোড করতে।andThen: একটি ডিকোডার চেইন করতে, একটি ডিকোডার অন্য ডিকোডারকে চালাতে।
উদাহরণ: JSON Decode
import Json.Decode exposing (decodeString, string, int, field, object)
type alias Person =
{ name : String
, age : Int
}
decodePerson : String -> Result String Person
decodePerson json =
decodeString (object
[ ( "name", field "name" string )
, ( "age", field "age" int )
]) json
-- উদাহরণ:
jsonString = "{\"name\":\"Alice\",\"age\":30}"
decodedPerson = decodePerson jsonString -- Person রেকর্ডে ডিকোড হবেএখানে:
decodePersonফাংশনটি একটি JSON স্ট্রিংকে Person রেকর্ডে ডিকোড করে।fieldএবংobjectব্যবহার করে JSON অবজেক্ট থেকে নির্দিষ্ট ফিল্ডগুলো ডিকোড করা হয়েছে।
যদি JSON স্ট্রিংটি সঠিক হয়, তাহলে আউটপুট হবে:
Ok { name = "Alice", age = 30 }আর যদি কোনো ভুল থাকে, তবে আউটপুট হবে:
Err "Some error message"৩. JSON Decode Error Handling
JSON ডিকোডিং সাধারণত Result টাইপের মাধ্যমে পরিচালিত হয়, যেখানে আপনি সফল ডিকোডিংয়ে Ok এবং ত্রুটিতে Err পাবেন। ত্রুটির ক্ষেত্রে, আপনি ডিকোডিং ফেইল এর কারণ হিসেবে একটি স্ট্রিং বা অন্যান্য তথ্য পেতে পারেন।
উদাহরণ: JSON Decode Error Handling
import Json.Decode exposing (decodeString, string, int, field, object)
type alias Person =
{ name : String
, age : Int
}
decodePerson : String -> Result String Person
decodePerson json =
decodeString (object
[ ( "name", field "name" string )
, ( "age", field "age" int )
]) json
-- উদাহরণ: ভুল JSON
invalidJsonString = "{\"name\":\"Alice\",\"age\":\"thirty\"}"
decodedPerson = decodePerson invalidJsonString
-- আউটপুট হবে: Err "Expecting an integer at field \"age\""এখানে:
- যদি age ফিল্ডের মান সঠিক টাইপের না হয় (যেমন, এখানে
"thirty"একটি স্ট্রিং), তবে এটি একটি ত্রুটি তৈরি করবে এবংErrরিটার্ন করবে।
৪. JSON Encode এবং Decode এর সম্মিলিত ব্যবহার
ধরা যাক, আপনি একটি সার্ভার থেকে একটি JSON ডেটা পাবেন, তার পর সেই ডেটা ডিকোড করবেন এবং অ্যাপ্লিকেশন স্টেটে আপডেট করবেন, তারপর আবার সেই স্টেটকে সার্ভারে পাঠাবেন।
উদাহরণ: JSON Encode এবং Decode সম্মিলিতভাবে ব্যবহার করা
module Main exposing (..)
import Html exposing (Html, div, button, text)
import Json.Encode exposing (encode, string, int, object)
import Json.Decode exposing (decodeString, string, int, field, object)
type alias Person =
{ name : String
, age : Int
}
-- Encode
encodePerson : Person -> String
encodePerson person =
encode 0 (object
[ ( "name", string person.name )
, ( "age", int person.age )
])
-- Decode
decodePerson : String -> Result String Person
decodePerson json =
decodeString (object
[ ( "name", field "name" string )
, ( "age", field "age" int )
]) json
-- View
view : Html msg
view =
div []
[ button [ onClick (encodePerson { name = "Alice", age = 30 }) ] [ text "Send Data" ]
, div [] [ text "Encoded JSON data: " ]
]
main =
Html.beginnerProgram { model = "", view = view, update = update }এখানে:
encodePersonফাংশনটি একটি Person রেকর্ডকে JSON ফরম্যাটে রূপান্তরিত করে।decodePersonফাংশনটি একটি JSON স্ট্রিংকে Person রেকর্ডে ডিকোড করে।- এই দুটি ফাংশন সম্মিলিতভাবে ডেটা পাঠানো এবং গ্রহণের জন্য ব্যবহৃত হবে।
উপসংহার
JSON Encode এবং JSON Decode এর মাধ্যমে Elm-এ আপনি JSON ডেটার সঙ্গে ইন্টারঅ্যাকশন করতে পারবেন। Encode ব্যবহার করে আপনি আপনার ডেটাকে JSON ফরম্যাটে রূপান্তরিত করতে পারেন এবং Decode ব্যবহার করে JSON ডেটাকে Elm মডেল বা রেকর্ডে রূপান্তর করতে পারেন। Error Handling ও Result টাইপ ব্যবহার করে আপনি JSON ডিকোডিং এর ত্রুটি সমাধান করতে পারেন, যা ডেটা আদান-প্রদানের সময়ে ত্রুটির হাত থেকে রক্ষা করে।
Read more