只需阅读精彩的“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
,这是对 Aeson 数组的遍历。
此外,由于您有一个具有多个结果的遍历并且想要一个列表而不是一个 Maybe,您必须使用 ^..
而不是 ^?
。
*Main> locations ^.. key "Locations" . values . key "averageReview" . nth 0
[String "5",String "4",String "3",String "2",String "1"]
正如 Carl 很有帮助地指出的那样,您可以在末尾添加
. _String
以直接获取字符串:*Main> locations ^.. key "Locations" . values . key "averageReview" . nth 0 . _String
["5","4","3","2","1"]
关于haskell - 带有 "free"引用的 Aeson Prisms,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24151941/