【发布时间】:2018-05-18 20:49:33
【问题描述】:
我有一条记录,我想用 JSON 字符串中的一些值以及一些额外提供的值来构造。
例如 - 给定以下记录:
data MyRecord = MyRecord { a :: String, b :: Int, c :: String }
我想定义一个函数:
createMyRecord :: String -> String -> Maybe MyRecord
createMyRecord json cValue = ???
我希望能够这样称呼:
createMyRecord "{\"a\": \"a value\", \"b\": 100}" "c value"
目前,我正在使用 Aeson 为非 JSON 的值创建具有默认值(即空字符串和零)的记录。然后,我创建了一个新版本的记录,并更新了其他字段。像这样的:
instance FromJSON MyRecord where
parseJSON = withObject "MyRecord" $ \o -> do
valueA <- o .: "a"
valueB <- o .: "b"
return MyRecord { a = valueA, b = valueB, c = "" }
createMyRecord :: String -> String -> Maybe MyRecord
createMyRecord json cValue =
Aeson.decode json <$> (\r -> r { c = cValue })
这感觉有点麻烦 - 我想一次性创建包含所有值的记录,而不是一步一步地填充它们。有没有更好的方法来使用 Aeson(我也对其他库开放),任何人都可以推荐?
谢谢!
【问题讨论】: