我最近开始玩Haskell,似乎无法解决这个问题。
我正在尝试从具有以下格式的YAML文件中读取:
id: 1
kind: good
created_at: !ruby/object:ActiveSupport::TimeWithZone
utc: &1 2017-01-01 10:34:12.533704000 Z
zone: &2 !ruby/object:ActiveSupport::TimeZone
time: *2
到目前为止,我可以通过这样做来完整地阅读id和kind:
data Item= Item{
id :: Integer,
kind::String
}
和
instance FromJSON Item where
parseJSON(Object v) = Item <$>
v .: "id" <*>
v .: "kind"
我正在使用“Data.Yaml”包和这个功能:
let items = Data.Yaml.decode ymlData :: Maybe[Item]
但我似乎无法弄清楚如何获得时间戳。
获取时间戳的正确方法是什么,只需要“utc”。
答案 0 :(得分:2)
最简单的方法是创建一个newtype
来实现FromJSON
。
import Data.Time
import Data.Yaml
data Item = Item
{ id :: Int
, kind :: String
, createdAt :: UTCTime
} deriving (Show)
instance FromJSON Item where
parseJSON (Object v) =
Item <$> v .: "id" <*> v .: "kind" <*> v .: "created_at"
newtype Time = Time String deriving (Show, Eq)
instance FromJSON Time where
parseJSON (Object v) = Time <$> v .: "utc"
希望有所帮助。