在Aeson中编写JSON日期数据的自定义实例

jul*_*les 0 json haskell aeson

我有以下形式的JSON日期数据:

  {"date": "2015-04-12"}
Run Code Online (Sandbox Code Playgroud)

和相应的haskell类型:

data Date = Date {
      year   :: Int
    , month  :: Int
    , day    :: Int
    }
Run Code Online (Sandbox Code Playgroud)

如何为Aeson库编写自定义FromJSONToJSON函数 ?由于格式化,派生实例不起作用.

Ale*_*lec 6

为什么重新发明轮子?你Datetime包中调用的内容有一个半标准的表示- 它被称为Day.它变得更好:不仅相同的包甚至为您提供了Day从您拥有的格式进行解析的实用程序,甚至可以导出这些实用程序aeson.是的,已经有ToJSONFromJSON实例中aesonDay:

ghci> :set -XOverloadedStrings
ghci> import Data.Time.Calendar
ghci> import Data.Aeson
ghci> fromJSON "2015-04-12" :: Result Day
Success 2015-04-12
ghci> toJSON (fromGregorian 2015 4 12)
String "2015-04-12"
Run Code Online (Sandbox Code Playgroud)

如果您真的想要提取日期,月份和年份,您可以随时使用toGregorian :: Day -> (Integer, Int, Int).坚持标准抽象可能是一个很好的长期选择.