Haskell:
Arbeider med JSON

Hvordan:

Haskell har ikke innebygd støtte for JSON som JavaScript, men med hjelp fra tredjepartsbiblioteker som Aeson, blir håndtering av JSON enkelt. Aeson tilbyr både høy- og lavnivåfunksjoner for koding (konvertere Haskell-verdier til JSON) og dekoding (parse JSON til Haskell-verdier).

Installere Aeson

Først, legg til Aeson i prosjektets avhengigheter ved å oppdatere din .cabal-fil eller bruke Stack eller Cabal direkte:

cabal update && cabal install aeson

eller, hvis du bruker Stack:

stack install aeson

Parse JSON

La oss starte med et grunnleggende eksempel på dekoding av JSON-data til en Haskell-type. Anta at vi har følgende JSON som representerer en person:

{
  "name": "John Doe",
  "age": 30
}

Først, definer en tilsvarende Haskell-datatype og gjør den til 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

-- Funksjon for å dekode JSON fra en fil
decodePerson :: FilePath -> IO (Maybe Person)
decodePerson filePath = do
  personJson <- B.readFile filePath
  return $ decode personJson

Bruk: Antar at person.json inneholder JSON-dataene som vist ovenfor, kjør:

main :: IO ()
main = do
  maybePerson <- decodePerson "person.json"
  print maybePerson

Eksempel på utdata:

Just (Person {name = "John Doe", age = 30})

Enkoding av Haskell-verdier som JSON

For å konvertere en Haskell-verdi tilbake til JSON, må du gjøre typen din til en instans av ToJSON og deretter bruke encode.

import Data.Aeson (ToJSON, encode)
import GHC.Generics (Generic)

-- Antatt Person-typen fra før

instance ToJSON Person

encodePerson :: Person -> B.ByteString
encodePerson = encode

main :: IO ()
main = do
  let person = Person "Jane Doe" 32
  putStrLn $ show $ encodePerson person

Eksempel på utdata:

{"name":"Jane Doe","age":32}

Disse eksemplene demonstrerer det grunnleggende i å jobbe med JSON i Haskell ved hjelp av Aeson. Husk, Aeson tilbyr mye mer, inkludert egendefinerte parse-regler, arbeid med komplekse nøstede JSON og mye mer, egnet for ulike behov og scenarioer.