代码之家  ›  专栏  ›  技术社区  ›  Saurabh Nanda

如何在一个Aeson中的所有键/值对上进行concatMap。使用镜头的对象

  •  1
  • Saurabh Nanda  · 技术社区  · 6 年前

    我一直在摆弄Control.Lens.index中的组合词,尤其是 iconcatMap Data.Aeson.Lens.members 镜头:

    func 
    
      -- list of key/value pairs, essentially
      :: Aeson.Object                  
    
      -- function for the concatMap operation to which the 
      -- key (Text) and value is passed
      -> (Text -> Aeson.Value -> [a])  
    
      -- resultant concatenated list
      -> [a]
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   András Kovács    6 年前

    所需功能为 iconcatMapOf . 另外,请注意 members 遍历类型 AsValue 没有这样的例子 Object ,所以我们需要把它包起来 Value

    import qualified Data.Aeson as Aeson
    import Control.Lens
    import Data.Aeson.Lens
    import Data.Text
    
    func :: Aeson.Object -> (Text -> Aeson.Value -> [a]) -> [a]
    func obj f = iconcatMapOf members f (Aeson.Object obj)
    
    推荐文章