【发布时间】:2014-08-31 12:13:21
【问题描述】:
我正在使用 facebook graph API,响应看起来类似于:
{
"data": [
{
"id": "311620272349920_311718615673419",
"from": {
"id": "1456046457993048",
"name": "Richard Ettinson"
},
"to": {
"data": [
{
"id": "311620272349920",
"name": "Barbara Fallerman"
}
]
},
"with_tags": {
"data": [
{
"id": "311620272349920",
"name": "Barbara Fallerman"
}
]
},
"message": "I was gong out with her",
"actions": [
{
"name": "Comment",
"link": "https://www.facebook.com/311620272349920/posts/311718615673419"
},
{
"name": "Like",
"link": "https://www.facebook.com/311620272349920/posts/311718615673419"
}
]
}
例如,我设法通过
提取from 字段
val extracted = (json \ "data" \"from").extract[PostFrom]
但我担心,如果我使用这种技术,我将需要多次传递 Json 以提取我需要的所有值,这可能会导致性能不佳。
我怎样才能将这些字段从不相似的对象数组中提取到案例类中?
我尝试了以下case classes:
abstract class BaseResponse()
case class Data(list:List[Post])
case class Post(id: String, post: PostFrom) extends BaseResponse
case class PostFrom(id: String, name:String)
这总是导致一个空列表,有没有办法找回一个Data 类,它有一个我感兴趣的某些类的列表? (例如顶级id、from和with_tags)
【问题讨论】:
-
"这可能会导致性能不佳" - 在需要之前,您不应该太在意性能。即,如果它可以每毫秒迭代 json 一百次,那么如果它迭代一次或四次可能并不重要
-
总的来说我会同意,但我觉得我没有完全掌握如何用 json4s 解析那些更复杂的 json 结构,这通常会很有帮助。所以我希望有人能给我一个更好的解决方案
-
FWIW 做 json \ "data" \ "from" 之类的事情基本上是地图查找。除非你必须做 1000 次,否则惩罚并不高。会对性能产生负面影响的是每个级别的元素数量。这是非常小的。所以是的,这不是恒定的时间查找,而是每个级别的元素数量,问题是它重要吗?
标签: scala facebook-graph-api json4s