将Haskell JSON镜头表达式转换回JSON

时间:2014-04-06 10:25:03

标签: json haskell aeson lens

如何为后面的Aeson Lens表达式添加后缀

>>> "{\"a\": 4, \"b\": 7}" & members . _Number *~ 10
"{\"a\":40,\"b\":70}"

所以结果是Value(带有Object构造函数)而不是String

2 个答案:

答案 0 :(得分:3)

您可以使用_Value棱镜转换为Maybe Value,然后从那里继续。镜头库中翻转的fmap运算符<&>为这样的情况提供了很好的语法:

"{\"a\": 4, \"b\": 7}"^? _Value <&> members . _Number *~ 10
-- Just (Object fromList [("a",Number 40.0),("b",Number 70.0)])

答案 1 :(得分:2)

您可以使用aeson中的decode来解析字符串,然后像以前一样使用镜头:

ghci> (decode "{\"a\": 4, \"b\": 7}" :: Maybe Value ) & _Just . members . _Number *~ 10
Just (Object fromList [("a",Number 40.0),("b",Number 70.0)])