【发布时间】:2017-10-28 00:17:45
【问题描述】:
我们正在尝试使用以下数据使用Aeson-JSON hackage 解码 JSON 对象:
data Car = Car
{ carPosition :: Position,
carColor :: Color,
carDirection :: Direction }
deriving (Show, Generic)
为Car 创建了一个实例,并为Postion、Direction 的数据类型做了同样的事情:
instance FromJSON Position
instance FromJSON Direction
instance FromJSON Car
但现在麻烦开始了,数据类型 Color 来自 Gloss hackage,其值为 e.g.写成Red。 Color 数据只知道:deriving Show,所以不可能添加deriving Generic。我们尝试了以下代码:
instance FromJSON Color where
parseJSON (Object v) = Color <$>
v .: "carColor"
它抱怨与Picture -> Picture 类型不匹配,而我们预计会出现类似Color 的内容。
我们的问题是:我们如何使用来自Gloss 的数据Color 来读取像这样的JSON 对象
{
"carPostion": { "x": 0, "y": 10},
"carColor": "Red",
"carDirection": "Up"
}
我们尝试在没有 carColor 的情况下读取 JSON 对象(仅用于测试目的),并且有效。
更新:看起来像这个问题:Haskell Data.Decimal as Aeson type 除了在我们的例子中,我们想使用Color,而在给定的Data.Decimal 是麻烦制造者。
【问题讨论】:
-
Color看起来像什么?此外,您以这种方式解析它对我来说没有多大意义。我希望parseJSON解析 JSON 字符串或类似的东西。 -
@WillemVanOnsem 我已经更新了我的问题。主要问题是
Color,没有这个属性我们可以用给定的代码成功地读取一个JSON对象。
标签: json haskell types instance aeson