使用哪个镜头来获取Aeson.Object中的所有键?

时间:2018-09-17 06:25:28

标签: haskell lens aeson lenses

我正在看https://www.stackage.org/haddock/lts-12.1/lens-aeson-1.0.2/Data-Aeson-Lens.html并试图找出一个镜头,可以从Object给我他们所有的钥匙。从概念上讲,我正在寻找以下内容:

allKeys :: Value -> Maybe [Text]
allKeys v = v ^? _Object . keys -- `keys` is not an actual lens!

我可能可能最接近的方法是使用members,但这似乎并不是最简单/最快/最短的方法。

2 个答案:

答案 0 :(得分:1)

toKeysList :: Value -> [Text]
toKeysList = toListOf $ asIndex members

答案 1 :(得分:0)

我可能会使用@Gurkenglas的建议,或者

view (_Object . to HM.keys)
    :: (AsValue s, MonadReader s m)
    => m [Text]

我发现有一点要注意,lens并不是真的很重要。因为某种原因。 对象的键是其“形状”的一部分。 lens在不需要更改形状时效果很好。因此,您可以获取键,但是您不能做其他很多事情,即您不能设置修改它们。