4

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"]

プリズムの点全体が欠けていますか? それとも、これは正当な使用例ですか?

乾杯!

4

1 に答える 1

7

nth 0whichをvaluesAeson 配列のトラバーサルに置き換えます。

また、複数の結果を持つトラバーサルがあり、Maybe ではなくリストが必要なため、^..代わりにを使用する必要があり^?ます。

*Main> locations ^.. key "Locations" . values . key "averageReview" . nth 0
[String "5",String "4",String "3",String "2",String "1"]

Carl が親切に指摘した. _Stringように、末尾に a を追加して、文字列を直接取り出すことができます。

*Main> locations ^.. key "Locations" . values . key "averageReview" . nth 0 . _String
["5","4","3","2","1"]
于 2014-06-10T23:04:53.963 に答える