खोज…


जेनरिक का उपयोग कर स्मार्ट एनकोडिंग और डिकोडिंग

एकसन के साथ 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)


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow