如何使用镜头从切片重建 JSON 数组?



我想使用镜头提取 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 数组"重建"为镜头表达式的一部分?

_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)

最新更新