我正在寻找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
,但它似乎不是实现这一点的最容易/最快/最短的方法。
3条答案
按热度按时间toe950271#
我可能会用@Gurkenglas建议的,或者
我发现需要注意的是
lens
在这里并不怎么出色;这是有原因的。对象的键是其“形状”的一部分。lens
在你不需要改变形状的时候工作得很好。所以你可以 * 获取 * 键,但是你不能做其他的事情,也就是说,你不能 * 设置 * 或者 * 修改 * 它们。lyr7nygr2#
2ul0zpep3#
为了补充@Gurkenglas的答案,需要在
toKeysList
中做一个小的更新,因为members
函数的类型签名在lens-aeson-1.2
中从AsValue t => IndexedTraversal' Text t Value
更改为AsValue t => IndexedTraversal' Key t Value
。