Использование Haskell с Aeson JSON Hackage и следующий JSON:
{
"base": "GBP",
"date": "2017-10-27",
"rates": {
"#USD": 1.3093,
"#EUR": 1.1282
}
}
Как лучше всего реализовать экземпляр FromJson
?
В настоящее время у меня есть это:
{-# LANGUAGE OverloadedStrings, DeriveGeneric #-}
import GHC.Generics
import Data.Aeson
data Conversion = Conversion {
base :: String,
rates :: Rates }
deriving (Show, Generic)
data Rates = Rates {
eur :: Float,
usd :: Float }
deriving (Show, Generic)
instance FromJSON Conversion
instance FromJSON Rates where
parseJSON (Object o) = trace ( show(o)) Rates <$> o .: "#USD" <*> o .: "#EUR"
Я определил обе возможности в файле instance FromJSON Rates
. Я попытался сделать это более общим способом, но «недопустимые» символы #
не разрешены в части data
.
Так что в этом случае у меня есть только два раздражающих поля. Но если я хочу расширить это и получить несколько надоедливых символов (#, @, - и т. д.), должен ли я определять каждое поле? Или есть более умный и быстрый способ добиться того же?
let x :: Maybe Conversion = decode "{\"base\":\"base\",\"rates\":{\"#USD\":1,\"#EUR\":2}}"
с вашими экземплярами. - person epsilonhalbe   schedule 30.10.2017parseJSON
самостоятельно. Если вы сами определяете json, я бы воздержался от добавления странных средств доступа к полям, таких как # @ и т. д., и придерживался обычного нижнего регистра с синтаксисом тире. - person epsilonhalbe   schedule 30.10.2017