我无法让aeson解析UTCTime值。我试图对其进行编码并将其反馈,但这不起作用:
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
UTCTime类型的FromJSON实例如下(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"
按照找到here的格式说明,一切都应该没问题。我错过了什么?
答案 0 :(得分:17)
Prelude Data.Aeson Data.Time> decode (encode [x]) :: Maybe [UTCTime]
Just [2013-10-17 10:06:59.542 UTC]
注意黑线鳕的“陷阱”部分:
请注意,JSON标准要求顶级值为 数组或对象。如果您尝试使用带结果的解码 未在JSON中表示为数组或对象的类型,代码 将进行类型检查,但它将始终在运行时“失败”:
...
所以坚持使用对象(例如Haskell中的贴图)或数组(Haskell中的列表或向量):