这可能是由于键名不匹配或JSON格式不正确导致的。您可以使用maybe
函数来处理这个问题,例如:
import Data.Aeson
-- 解析JSON字符串
parseJSONStr :: ByteString -> Maybe Value
parseJSONStr str = decode str
-- 获取键值对
getValueByKey :: Value -> Text -> Maybe Value
getValueByKey obj key = case obj of
Object o -> Data.HashMap.Strict.lookup key o
_ -> Nothing
-- 示例JSON字符串
exampleJSON = "{\"name\":\"Alice\",\"age\":20}"
-- 获取键为"name"的值
nameVal = case parseJSONStr exampleJSON of
Just obj -> getValueByKey obj "name"
_ -> Nothing
-- 处理键值不存在的情况
name = case nameVal of
Just (String n) -> Just n
_ -> Nothing
在上面的代码中,getValueByKey
函数通过键名获取值,如果键名不存在则返回Nothing
。然后,我们可以在获取键值的部分使用maybe
函数来处理获取不到值的情况。如果键名存在,maybe
函数将返回Just
,否则将返回Nothing
。