gpt4 book ai didi

json - 如何从 dispatch.json.JsObject 中提取

转载 作者:行者123 更新时间:2023-12-04 18:52:43 25 4
gpt4 key购买 nike

我需要做什么来提取friends_count的值。我注意到 screen_name 已经在 Status 对象和案例类中定义。仍然需要扩展 Js 或 JsObject 不同

object TweetDetails extends Js { val friends_count = 'friends_count ? num }

然后将其与 JsObjects 列表中的每个 json 对象进行模式匹配,如下所示。这些符号令人困惑:
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)

我们要做的第一件事是扩展 Dispatch-Twitter 模块中的 UserProps trait 给它一个 friends_count提取器,然后定义 ExtUser我们可以用来访问该提取器的对象。因为ExtUserProps扩展了UserProps,也扩展了Js,所以我们得到方法 sym_add_operators在将我们的符号变为 'friends_count 的范围内进入 SymOp 案例类。然后我们调用 ! 该 SymOp 上的方法,然后我们将其传递给提取器 num to,它创建了一个提取器,它在 JSON 对象上查找属性“friends_count”,然后在返回之前将其解析为数字。对于这么少的代码,有很多事情要做。

程序的下一部分只是一个理解,它为用户调用 Twitter 时间线并将其解析为代表每个状态项的 JsObjects,我们应用 Status.text提取器以提取状态消息。然后我们做同样的事情来拉出用户。然后,我们将 screen_name 和friend_count 从用户 JsObject 中提取出来,最后我们返回一个 Tuple3,其中包含我们正在寻找的所有属性。然后我们剩下一个 List[Tuple3[String,String,BigDecimal]] ,然后您可以对其进行迭代以打印出来或做任何事情。

我希望这能澄清一些事情。 Dispatch 库非常具有表现力,但可能有点难以理解,因为它使用了许多 Scala 技巧,而刚学习 Scala 的人不会马上掌握。但是请继续使用和使用,以及查看测试和源代码,您将了解如何使用 Scala 创建强大的 DSL。

关于json - 如何从 dispatch.json.JsObject 中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com