haskell 通过关键字访问JSON值

n3ipq98p  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(82)

我想用一个键从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

kd3sttzy

kd3sttzy1#

在以前的aeson版本中,这是可行的。然而,由于aeson-2.0.0.0aeson不再与HashMap一起工作,而是与自己的KeyMap一起工作,因此您无法使用HashMaplookup
但是,您可能不需要手动实现这一点。事实上,您可以使用lens-aeson package [hackage]的镜头。您可以使用**key :: AsValue t => Key -> Traversal' t Value**查找密钥:

{-# LANGUAGE OverloadedStrings #-}

import Control.Lens.Fold ((^?))
import Data.Aeson (Value)
import Data.Aeson.Lens (key)

my_value :: Maybe Value
my_value = rep_json ^? key "names"
9vw9lbht

9vw9lbht2#

Object曾经有hashmap,但在最新版本中没有。它们现在包含一个抽象KeyMap类型。我不知道为什么他们肯定会改变,但我不会感到惊讶,如果它是给予一个新的类型挂类示例。你可以在documentation here中看到更多;在大多数情况下,您只需更改从哪个模块获取操作(即,您的HM.lookup-> Data.Aeson.KeyMap.lookup)。

相关问题