我想用一个键从JSON对象中获取一个值
let nm = case rep_json of
Object v -> case HM.lookup "names" v of
Just endps -> Just v
_ -> Nothing
_ -> Nothing
这不工作,我得到这个错误
无法匹配类型:Data.Aeson.KeyMap.KeyMap值:HashMap k0 v0预期值:HashMap k0 v0实际值:在'HM. lookup'的第二个参数中,即v
2条答案
按热度按时间kd3sttzy1#
在以前的aeson版本中,这是可行的。然而,由于
aeson-2.0.0.0
,aeson
不再与HashMap
一起工作,而是与自己的KeyMap
一起工作,因此您无法使用HashMap
的lookup
。但是,您可能不需要手动实现这一点。事实上,您可以使用
lens-aeson
package [hackage]的镜头。您可以使用**key :: AsValue t => Key -> Traversal' t Value
**查找密钥:9vw9lbht2#
Object
曾经有hashmap,但在最新版本中没有。它们现在包含一个抽象KeyMap
类型。我不知道为什么他们肯定会改变,但我不会感到惊讶,如果它是给予一个新的类型挂类示例。你可以在documentation here中看到更多;在大多数情况下,您只需更改从哪个模块获取操作(即,您的HM.lookup
->Data.Aeson.KeyMap.lookup
)。