Nie mogę uzyskać eseonu do przeanalizowania wartości UTCTime. Próbowałem kodować jeden i karmić je z powrotem, ale to nie działa:parsowanie utctime z aesonem
Prelude Data.Aeson Data.Time.Clock> getCurrentTime >>= (print . encode)
"\"2013-10-17T09:42:49.007Z\""
Prelude Data.Aeson Data.Time.Clock> decode "2013-10-17T09:42:49.007Z" :: Maybe UTCTime
Nothing
Prelude Data.Aeson Data.Time.Clock> decode "\"2013-10-17T09:42:49.007Z\"" :: Maybe UTCTime
Nothing
Instancja FromJSON typu UTCTime jest następujący (ref):
instance FromJSON UTCTime where
parseJSON = withText "UTCTime" $ \t ->
case parseTime defaultTimeLocale "%FT%T%QZ" (unpack t) of
Just d -> pure d
_ -> fail "could not parse ISO-8601 date"
następujący opis formatu znalezionego here, wszystko powinno być w porządku. czego mi brakuje?
czytałem ten rozdział. Jednak mój mózg nie nawiązał połączenia. Dzięki! – Simon
Jedną z praktycznych sztuczek, które można ominąć, jest po prostu umieszczenie twoich typów w warstwie listy: 'decode" ... ":: FromJSON a => Maybe [a]'. Używam go cały czas do sprawdzania przekleństw. Jest to * znacznie * łatwiejsze niż próby przeprogramowania wewnętrznych analizatorów Aeson, aby uzyskać niestandardowe zachowanie JSON. –
Jeśli użyjesz parsera 'value' z' Data.Aeson.Parser', możesz zmienić specyfikację. wymaganie tylko parsowania obiektu/tablic json najwyższego poziomu i analizowanie poszczególnych wartości. Użyj go z attoparsec. –