这是我第一次使用 argonauts,对镜头只有一点了解(足以应付)。我花了一段时间试图自己找出问题,但一无所获。
我正在尝试构建一个镜头以从一些 JSON 中获取一个 JsonArray(字符串)。我可以到达具有数组的对象,但不知道从那里做什么。
JSON 看起来像:
到目前为止,我的镜头是这样的:
val hashtagsView = twitterEntitiesView >=> jsonObjectPL("hashtags") >=> jArrayPL
我也不确定这jArrayPL
是否正确。我想做的只是从数组中检索文本。
所以总结一下,任何人都可以帮助我找出如何构建一个查看主题标签的镜头,然后为数组的每个元素查看文本,最后得到一个值作为JsonArray
.
更新:
在 Travis 的帮助下,我编译了以下代码:
import argonaut._, Argonaut._
import monocle.std.list._, monocle.function.Each.each, monocle.function.Index.index
import scalaz._, Scalaz._
val \/-(json) = Parse.parse(rawJSON)
val lens = jObjectPrism
.composeOptional(index("hashtags"))
.composePrism(jArrayPrism)
.composeTraversal(each[List[Json], Json])
.composePrism(jObjectPrism)
.composeOptional(index("text"))
.composePrism(jStringPrism)
println(lens.getAll(json))
不幸的是,我得到一个运行时错误:scalaz.Scalaz$.ToEitherOps(Ljava/lang/Object;)Lscalaz/syntax/EitherOps;
从行开始val \/-(json) = Parse.parse(rawJSON)
提前致谢!