Haskell:
Praca z JSON
Jak:
Haskell nie ma wbudowanego wsparcia dla JSON, tak jak JavaScript, ale z pomocą bibliotek stron trzecich, takich jak Aeson, obsługa JSON staje się prosta. Aeson oferuje zarówno funkcje wysokiego, jak i niskiego poziomu do kodowania (konwertowanie wartości Haskell na JSON) oraz dekodowania (parsowanie JSON do wartości Haskell).
Instalacja Aeson
Najpierw dodaj Aeson do zależności swojego projektu, aktualizując plik .cabal lub bezpośrednio używając Stack lub Cabal:
cabal update && cabal install aesonlub, jeśli używasz Stack:
stack install aesonParsowanie JSON
Zacznijmy od podstawowego przykładu dekodowania danych JSON na typ Haskell. Załóżmy, że mamy następujący JSON reprezentujący osobę:
{
"name": "John Doe",
"age": 30
}Najpierw zdefiniuj odpowiadający mu typ danych Haskell i uczyn go instancją 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
-- Funkcja do dekodowania JSON z pliku
decodePerson :: FilePath -> IO (Maybe Person)
decodePerson filePath = do
personJson <- B.readFile filePath
return $ decode personJsonSposób użycia:
Zakładając, że person.json zawiera powyższe dane JSON, uruchom:
main :: IO ()
main = do
maybePerson <- decodePerson "person.json"
print maybePersonPrzykładowy wynik:
Just (Person {name = "John Doe", age = 30})Kodowanie wartości Haskell jako JSON
Aby przekonwertować wartość Haskell z powrotem na JSON, musisz uczynić swój typ instancją ToJSON, a następnie użyć encode.
import Data.Aeson (ToJSON, encode)
import GHC.Generics (Generic)
-- Zakładając typ Person z poprzednich przykładów
instance ToJSON Person
encodePerson :: Person -> B.ByteString
encodePerson = encode
main :: IO ()
main = do
let person = Person "Jane Doe" 32
putStrLn $ show $ encodePerson personPrzykładowy wynik:
{"name":"Jane Doe","age":32}Te przykłady demonstrują podstawy pracy z JSON w Haskellu, używając Aeson. Pamiętaj, że Aeson oferuje znacznie więcej, w tym niestandardowe reguły parsowania, pracę z zagnieżdżonym JSONem i wiele innych, odpowiednie dla różnych potrzeb i scenariuszy.