我正在看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
,但这似乎并不是最简单/最快/最短的方法。
答案 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
在不需要更改形状时效果很好。因此,您可以获取键,但是您不能做其他很多事情,即您不能设置或修改它们。