Haskell Language
Data.Aeson - हास्केल में JSON
खोज…
जेनरिक का उपयोग कर स्मार्ट एनकोडिंग और डिकोडिंग
एकसन के साथ JSON को हास्केल डेटा प्रकार को एन्कोड करने का सबसे आसान और तेज तरीका जेनरिक का उपयोग कर रहा है।
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics
import Data.Text
import Data.Aeson
import Data.ByteString.Lazy
पहले हमें एक डेटा टाइप व्यक्ति बनाएँ:
data Person = Person { firstName :: Text
, lastName :: Text
, age :: Int
} deriving (Show, Generic)
Data.Aeson
पैकेज से encode
और decode
फ़ंक्शन का उपयोग करने के लिए हमें Person
को ToJSON
और FromJSON
का एक उदाहरण बनाने की आवश्यकता है। चूँकि हम Generic
for Person
व्युत्पन्न करते हैं, इसलिए हम इन वर्गों के लिए खाली उदाहरण बना सकते हैं। विधियों की डिफ़ॉल्ट परिभाषा Generic
प्रकार वर्ग द्वारा प्रदान की गई विधियों के संदर्भ में परिभाषित की गई है।
instance ToJSON Person
instance FromJSON Person
किया हुआ! एन्कोडिंग गति को बेहतर बनाने के लिए हम ToJSON
उदाहरण को थोड़ा बदल सकते हैं:
instance ToJSON Person where
toEncoding = genericToEncoding defaultOptions
अब हम एक (आलसी) Person
को बाइटस्ट्रिंग में परिवर्तित करने के लिए encode
फ़ंक्शन का उपयोग कर सकते हैं:
encodeNewPerson :: Text -> Text -> Int -> ByteString
encodeNewPerson first last age = encode $ Person first last age
और डिकोड करने के लिए हम सिर्फ decode
उपयोग कर सकते decode
:
> encodeNewPerson "Hans" "Wurst" 30
"{\"lastName\":\"Wurst\",\"age\":30,\"firstName\":\"Hans\"}"
> decode $ encodeNewPerson "Hans" "Wurst" 30
Just (Person {firstName = "Hans", lastName = "Wurst", age = 30})
Data.Aeson.Value उत्पन्न करने का एक त्वरित तरीका
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Aeson
main :: IO ()
main = do
let example = Data.Aeson.object [ "key" .= (5 :: Integer), "somethingElse" .= (2 :: Integer) ] :: Value
print . encode $ example
वैकल्पिक फ़ील्ड
कभी-कभी, हम चाहते हैं कि JSON स्ट्रिंग के कुछ क्षेत्र वैकल्पिक हों। उदाहरण के लिए,
data Person = Person { firstName :: Text
, lastName :: Text
, age :: Maybe Int
}
इससे हासिल किया जा सकता है
import Data.Aeson.TH
$(deriveJSON defaultOptions{omitNothingFields = True} ''Person)