作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要做什么来提取friends_count的值。我注意到 screen_name 已经在 Status 对象和案例类中定义。仍然需要扩展 Js 或 JsObject 不同
object TweetDetails extends Js { val friends_count = 'friends_count ? num }
scala> val friends_count = 'friends_count ! num // I wish SO understood Scala's symbols
val twtJsonList = http(Status("username").timeline)
twtJsonList foreach {
js =>
val Status.user.screen_name(screen_name) = js
val Status.text(text) = js
val friends_counts(friends_count) = js //i cannot figure out how to extract this
println(friends_count)
println(screen_name)
println(text)
最佳答案
通常,Scala 符号可以被认为是一个始终相同的唯一标识符。每个在词法上相同的符号都指的是完全相同的内存空间。从 Scala 的角度来看,它们没有什么特别之处。
但是,Dispatch-Json 会提取符号,使其成为 JSON 属性提取器。要查看负责拉皮条的代码,请查看 SymOp class和其余的 JsonExtractor.scala 代码。
让我们编写一些代码来解决您正在查看的问题,然后分析发生了什么:
trait ExtUserProps extends UserProps with Js {
val friends_count = 'friends_count ! num
}
object ExtUser extends ExtUserProps with Js
val good_stuff = for {
item <- http(Status("username").timeline)
msg = Status.text(item)
user = Status.user(item)
screen_name = ExtUser.screen_name(user)
friend_count = ExtUser.friends_count(user)
} yield (screen_name, msg, friend_count)
friends_count
提取器,然后定义
ExtUser
我们可以用来访问该提取器的对象。因为ExtUserProps扩展了UserProps,也扩展了Js,所以我们得到方法
sym_add_operators
在将我们的符号变为
'friends_count
的范围内进入 SymOp 案例类。然后我们调用
!
该 SymOp 上的方法,然后我们将其传递给提取器
num
to,它创建了一个提取器,它在 JSON 对象上查找属性“friends_count”,然后在返回之前将其解析为数字。对于这么少的代码,有很多事情要做。
Status.text
提取器以提取状态消息。然后我们做同样的事情来拉出用户。然后,我们将 screen_name 和friend_count 从用户 JsObject 中提取出来,最后我们返回一个 Tuple3,其中包含我们正在寻找的所有属性。然后我们剩下一个 List[Tuple3[String,String,BigDecimal]] ,然后您可以对其进行迭代以打印出来或做任何事情。
关于json - 如何从 dispatch.json.JsObject 中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765954/
我是一名优秀的程序员,十分优秀!