11
私はaesonを取得してUTCTime値を解析できません。私は1つをコードし、それをフィードバックすることを試みたが、それは動作しませんでした:見出さフォーマット記述以下aesonでutctimeを解析する
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"
:
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
UTC時刻型のFromJSONインスタンスは、以下の(ref)でありますhere、すべてが正常である必要があります。私は何が欠けていますか?
私は、このセクションを読んでいました。しかし、私の脳はつながりませんでした。ありがとう! – Simon
これを回避するための実用的なトリックは、あなたのタイプをリストレイヤーでラップすることです: 'Decode" ... ":: FromJSON a =>たぶん[a]'。私はサブパーザルを素早くチェックするためにこれを常に使用しています。非標準のJSONの動作を得るために内部のAesonパーサーを再配線しようとするよりもずっと簡単です。 –
'Data.Aeson.Parser'の' value'パーサを使うと、その仕様を上書きすることができます。トップレベルのjsonオブジェクト/配列の解析のみを要求し、個々の値を解析します。 attoparsecで使用してください。 –