只需阅读精彩的" Lens/Aeson Traversals/Prisms"文章并拥有真实世界的应用程序.鉴于以下匿名JSON结构,我如何棱析出集合而不是特定值?
{"Locations" : [ {"id" : "2o8434", "averageReview": ["5", "1"]},{"id" : "2o8435", "averageReview": ["4", "1"]},{"id" : "2o8436", "averageReview": ["3", "1"]},{"id" : "2o8437", "averageReview": ["2", "1"]},{"id" : "2o8438", "averageReview": ["1", "1"]}]}
我有:
?> locations ^? key "Locations" . nth 0 . key "averageReview" . nth 0 Just (String "5")
我想要的是:
?> locations ^? key "Locations" . * . key "averageReview" . nth 0 ["5", "4", "3", "2", "1"]
我错过了整个棱镜点吗?或者这是一个合法的用例?
干杯!
要替换nth 0
使用values
这是一个穿越了埃宋阵列.
此外,由于您有一个包含多个结果的遍历并且想要一个列表而不是一个Maybe,您必须使用^..
而不是^?
.
*Main> locations ^.. key "Locations" . values . key "averageReview" . nth 0 [String "5",String "4",String "3",String "2",String "1"]
正如卡尔有用地指出的那样,你可以添加一个. _String
到最后直接获取字符串:
*Main> locations ^.. key "Locations" . values . key "averageReview" . nth 0 . _String ["5","4","3","2","1"]