我想使用镜头提取JSON数组的一部分,并找回Value
。更具体地说,我正在尝试执行以下操作:
$ import qualified Data.ByteString.Lazy as LBS
$ import Data.Aeson.Lens
$ import Control.Lens
$ let e = "{\"headers\":[[\"Host\",\"localhost:9090\"],[\"Accept-Encoding\",\"gzip\"]]}" :: LBS.ByteString
$ e ^? key "headers" . nth 0 . _Array . sliced 0 2
$ Just [String "Host",String "localhost:9090"]
它可以工作,但是我希望结果是Value
而不是List
。如何在镜头表达式中“重建” JSON数组?
答案 0 :(得分:2)
_Array
是Prism
。这意味着您可以将其取反以获得re _Array :: AsValue t => Getter (Vector Value) t
。
e ^? key "headers" . nth 0 . _Array . sliced 0 2 . re _Array
您还可以使用over
(或其别名(%~)
):
e ^? key "headers" . nth 0 . to (over _Array (slice 0 2))
e ^? key "headers" . nth 0 . to (_Array %~ slice 0 2)