Tôi không thể nhận được aeson để phân tích giá trị UTCTime. Tôi cố gắng để mã hóa một và ăn nó trở lại, nhưng điều đó không làm việc:phân tích cú pháp utctime với aeson
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
Các FromJSON thể hiện của loại UTCTime là như sau (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"
sau mô tả định dạng tìm thấy here, mọi thứ sẽ ổn. Tôi đang thiếu gì?
tôi đã đọc phần này. Tuy nhiên, bộ não của tôi không tạo ra kết nối. Cảm ơn! – Simon
Một mẹo thực tế để thực hiện việc này là chỉ quấn các loại của bạn vào một lớp danh sách: 'decode" ... ":: FromJSON a => Có thể [a]'. Tôi sử dụng tất cả các thời gian để kiểm tra nhanh subparsers. Nó * dễ dàng hơn nhiều so với việc cố gắng viết lại các trình phân tích cú pháp Aeson bên trong để giúp bạn có hành vi JSON không chuẩn. –
Nếu bạn sử dụng trình phân tích cú pháp 'giá trị' từ' Data.Aeson.Parser', bạn có thể ghi đè thông số. yêu cầu chỉ phân tích cú pháp đối tượng/mảng json mức cao nhất và phân tích các giá trị riêng lẻ. Sử dụng nó với attoparsec. –