Haskell:
Arbeta med JSON
Hur:
Haskell har inte inbyggt stöd för JSON som JavaScript, men med hjälp av tredjepartsbibliotek såsom Aeson, blir hanteringen av JSON enkel. Aeson erbjuder både hög-nivå och låg-nivå funktioner för kodning (konvertering av Haskell-värden till JSON) och avkodning (tolkning av JSON till Haskell-värden).
Installation av Aeson
Först, lägg till Aeson i ditt projekts beroenden genom att uppdatera din .cabal-fil eller använd Stack eller Cabal direkt:
cabal update && cabal install aesoneller, om du använder Stack:
stack install aesonTolka JSON
Låt oss börja med ett grundläggande exempel på avkodning av JSON-data till en Haskell-typ. Antag att vi har följande JSON som representerar en person:
{
"name": "John Doe",
"age": 30
}Först, definiera en motsvarande Haskell-datayp och gör den till en instans av FromJSON:
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics (Generic)
import Data.Aeson (FromJSON, decode)
import qualified Data.ByteString.Lazy as B
data Person = Person
{ name :: String
, age :: Int
} deriving (Generic, Show)
instance FromJSON Person
-- Funktion för att avkoda JSON från en fil
decodePerson :: FilePath -> IO (Maybe Person)
decodePerson filePath = do
personJson <- B.readFile filePath
return $ decode personJsonAnvändning:
Förutsatt att person.json innehåller JSON-datan som visas ovan, kör:
main :: IO ()
main = do
maybePerson <- decodePerson "person.json"
print maybePersonExempelutdata:
Just (Person {name = "John Doe", age = 30})Kodning av Haskell-värden som JSON
För att konvertera ett Haskell-värde tillbaka till JSON behöver du göra din typ till en instans av ToJSON och sedan använda encode.
import Data.Aeson (ToJSON, encode)
import GHC.Generics (Generic)
-- Förutsatt att person-typen från tidigare
instance ToJSON Person
encodePerson :: Person -> B.ByteString
encodePerson = encode
main :: IO ()
main = do
let person = Person "Jane Doe" 32
putStrLn $ show $ encodePerson personExempelutdata:
{"name":"Jane Doe","age":32}Dessa exempel demonstrerar grunderna i att arbeta med JSON i Haskell med hjälp av Aeson. Kom ihåg, Aeson erbjuder mycket mer, inklusive anpassade tolkningsregler, arbete med komplexa inbäddade JSON och mycket mer, lämpligt för olika behov och scenarier.