Haskell Language
Data.Aeson - 하스켈의 JSON
수색…
제네릭을 사용한 스마트 인코딩 및 디코딩
Aeson에서 하스켈 데이터 유형을 JSON으로 인코딩하는 가장 쉽고 빠른 방법은 제네릭을 사용하는 것입니다.
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics
import Data.Text
import Data.Aeson
import Data.ByteString.Lazy
먼저 데이터 유형 Person을 작성하겠습니다.
data Person = Person { firstName :: Text
, lastName :: Text
, age :: Int
} deriving (Show, Generic)
Data.Aeson
패키지에서 encode
와 decode
함수를 사용하려면 Person
을 ToJSON
과 FromJSON
의 인스턴스로 FromJSON
합니다. 우리는 Generic
for Person
을 파생 Generic
클래스에 대해 빈 인스턴스를 만들 수 있습니다. 메소드의 기본 정의는 Generic
유형 클래스가 제공하는 메소드로 정의됩니다.
instance ToJSON Person
instance FromJSON Person
끝난! 인코딩 속도를 향상시키기 위해 ToJSON
인스턴스를 약간 변경할 수 있습니다.
instance ToJSON Person where
toEncoding = genericToEncoding defaultOptions
이제 encode
함수를 사용하여 Person
을 (게으른) Bytestring으로 변환 할 수 있습니다.
encodeNewPerson :: Text -> Text -> Int -> ByteString
encodeNewPerson first last age = encode $ Person first last age
그리고 우리가 사용할 수있는 디코딩하는 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